Собственный функтор необъявлен при построении Tensorflow

Я пытаюсь внести свой вклад в код Tensorflow, добавив неинверсные гиперболические функции (sinh и cosh), как это было запрошено в [выпуск № 7531] (https://github.com/tensorflow/tensorflow/issues/7531).

Когда я тестирую сборку командой

$ bazel test --config opt //tensorflow/core/kernels:cwise_ops_test

Но я получаю ошибку:

> ...
>  external/eigen_archive/unsupported/Eigen/CXX11/../../../Eigen/src/Core/MathFunctions.h:1446:3:
> note: 'sinh' should be declared prior to the call site or in an
> associated namespace of one of its arguments T sinh(const T &x) {   ^
> 1 error generated. Target //tensorflow/core/kernels:cwise_ops_test
> failed to build Use --verbose_failures to see the command lines of
> failed build steps. INFO: Elapsed time: 6.106s, Critical Path: 5.78s
>
> Executed 0 out of 1 test: 1 fails to build.

Полный вывод можно увидеть Вот.

Я добавил эти два шаблона в cwise_ops.h:

template <typename T>
struct acos : base<T, Eigen::internal::scalar_acos_op<T> > {};

template <typename T>
struct atan : base<T, Eigen::internal::scalar_atan_op<T> > {};

// The following two templates are new:
template <typename T>
struct sinh : base<T, Eigen::internal::scalar_sinh_op<T> > {};

template <typename T>
struct cosh : base<T, Eigen::internal::scalar_cosh_op<T> > {};

и сделал два новых файла cwise_op_sinh.cc а также cwise_op_cosh.cc, которые являются просто копиями негиперболических версий со ссылками на sin или cos, замененные на sinh и cosh, соответственно. Насколько я могу видеть, гиперболические функции теперь реализованы точно так же, как и другие математические функции из библиотеки Eigen. Но насколько я вижу ошибку, она дает ссылки на отсутствующие объявления в Eigen source.

Это мой самый первый вклад с открытым исходным кодом, и, кроме того, я довольно новичок в C ++. То, что я сделал неправильно, может быть очевидно с большим опытом работы с C ++.

1

Решение

Вы добавили ваши cwise_op_sinh.cc и cwise_op_cosh.cc в соответствующий файл BUILD? Быстрый поиск говорит мне, что это должно быть Вот но я могу ошибаться Вы определенно должны рассказать Bazel о ваших новых файлах.

0

Другие решения

(Это должен быть комментарий к вопросу ОП, но мне не хватает необходимой кармы.)

--config opt флаг кажется неправильным, ты имел ввиду -c opt для оптимизированной сборки? --config opt означает использование конфигурации «opt» из файла bazelrc, которая предполагает, что у вас есть строки в файле bazelrc, такие как «build: opt —flag1 = value1» и аналогичные. Если вы этого не сделаете, то Bazel должен отобразить предупреждение:

WARNING: Config values are not defined in any .rc file: "opt"

или что-то на этот счет.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector