2017-02-18 15 views
1

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

Когда я протестировать сборку с помощью команды

$ 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. 

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

То, что я сделал, добавить эти два шаблона в 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, которые являются всего лишь копиями негиперболических версий со ссылками на грех или соза заменен зп и cosh соответственно. Насколько я вижу, гиперболические функции теперь реализованы точно так же, как и другие математические функции из библиотеки Eigen. Но насколько я вижу ошибку, она дает ссылки на отсутствующие объявления в источнике Eigen.

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

ответ

0

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

1

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

Флаг --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" 

или что-то в этом роде.