【问题标题】:Caffe remove .cu implementation got compile errorsCaffe remove .cu 实现出现编译错误
【发布时间】:2016-12-21 07:11:38
【问题描述】:

我正在尝试将 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 文件?我不想再在我的项目中使用它了。非常感谢!

【问题讨论】:

  • 我找到了一种方法,即在backward_gpu中调用backward_cpu。我可以这样做,但我仍然想知道是否有更简洁的方法来实现。

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


【解决方案1】:

只需从sigmoid_cross_entropy_loss_layer.hpp 文件中删除Backward_gpuForward_gpu 声明即可。

.cu 文件包含这些虚函数的定义,因此当您删除 .cu 文件时,您有没有实现的虚函数声明。

您还需要从sigmoid_cross_entropy_loss_layer.cpp 文件中删除以下行:

#ifdef CPU_ONLY
STUB_GPU(WARPLossLayer);
#endif

这可确保您的编译器不会为 *_gpu 函数创建存根,因为这会导致 Caffe 中断,因为您删除了头文件中的声明。

您还必须相应地编辑测试。

【讨论】:

    猜你喜欢
    • 2017-09-30
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2015-11-07
    • 2021-04-25
    相关资源
    最近更新 更多