Я пытаюсь внести свой вклад в код 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 ++.
Вы добавили ваши cwise_op_sinh.cc и cwise_op_cosh.cc в соответствующий файл BUILD? Быстрый поиск говорит мне, что это должно быть Вот но я могу ошибаться Вы определенно должны рассказать Bazel о ваших новых файлах.
(Это должен быть комментарий к вопросу ОП, но мне не хватает необходимой кармы.)
--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"
или что-то на этот счет.