Caffe删除.cu实现有编译错误

时间:2016-08-15 03:38:06

标签: c++ machine-learning neural-network deep-learning caffe

我正在尝试将SigmoidCrossEntropyLossLayer修改为我自己的版本。我只实现了.cpp版本。已经存在一个SigmoidCrossEntropyLossLayer的.cu文件,似乎我必须使用backword_gpu作为我的后向实现。我试图删除这个.cu文件,这里是弹出的错误之一(实际上所有类似的错误只是使用不同的bin文件):

make: *** [.build_release/tools/compute_image_mean.bin] Error 1
.build_release/lib/libcaffe.so: undefined reference to `caffe::SigmoidCrossEntropyLossLayer<double>::Backward_gpu(std::vector<caffe::Blob<double>*, std::allocator<caffe::Blob<double>*> > const&, std::vector<bool, std::allocator<bool> > const&, std::vector<caffe::Blob<double>*, std::allocator<caffe::Blob<double>*> > const&)'

有谁知道如何让caffe忽略这个单独的.cu文件?我不想再在我的项目中使用它了。非常感谢!

1 个答案:

答案 0 :(得分:0)

&lt; p&gt;只需删除&lt; code&gt; Backward_gpu&lt; / code&gt;和&lt; code&gt; Forward_gpu&lt; / code&gt;来自&lt; code&gt; sigmoid_cross_entropy_loss_layer.hpp&lt; / code&gt;的声明文件。 &LT; / p为H. &lt; p&gt; .cu文件具有这些虚函数的定义,因此当您删除.cu文件时,您将获得没有实现的虚函数声明。&lt; / p&gt; &lt; p&gt;您还需要从&lt; code&gt; sigmoid_cross_entropy_loss_layer.cpp&lt; / code&gt;中删除以下行:文件:其中/ p为H. &lt; pre&gt;&lt; code&gt; #ifdef CPU_ONLY STUB_GPU(WARPLossLayer); #万一 &LT; /代码&GT;&LT; /预&GT; &lt; p&gt;这可确保您的编译器不会为&lt; code&gt; * _ gpu&lt; / code&gt;创建存根。这样的函数会导致Caffe中断,因为你删除了头文件中的声明。&lt; / p&gt; &lt; p&gt;您还必须相应地编辑测试。&lt; / p&gt;