2016-08-15 15 views
1

SigmoidCrossEntropyLossLayerを自分のバージョンに改訂しようとしています。私は.cppバージョンしか実装していませんでした。 SigmoidCrossEntropyLossLayerの.cuファイルがすでにありました。バックワード実装としてbackword_gpuを使用する必要があるようです。私は、この.cuファイルを削除しようとしましたし、ここで(ちょうど異なるビンファイルと、実際にすべての同様のエラー)飛び出したエラーのいずれかです。Caffeの.cu実装でコンパイルエラーが発生する

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&)' 

誰でもカフェは、この単一.cuファイルを無視できるようにする方法を知っていますか?私は自分のプロジェクトでこれ以上使用したくありません。どうもありがとう!

+0

私はこれを行う方法を見つけました。これはbackward_gpuでbackward_cpuを呼び出しています。私はこのようにすることができますが、私はまだ達成するためのきれいな方法があるのだろうと思っています。 –

答えて

0

sigmoid_cross_entropy_loss_layer.hppファイルからBackward_gpuForward_gpuの宣言を削除するだけです。

.cuファイルにはこれらの仮想関数の定義があります。したがって、.cuファイルを削除すると、実装がない仮想関数宣言があります。あなたが宣言を取り除くため、カフェが破損する原因になります。これは、このよう*_gpu機能のスタブを作成しません、あなたのコンパイラを保証

#ifdef CPU_ONLY 
STUB_GPU(WARPLossLayer); 
#endif 

また、あなたのsigmoid_cross_entropy_loss_layer.cppファイルから次の行を削除する必要がありますヘッダーファイルに追加します。

また、それに応じてテストを編集する必要があります。

+0

ありがとうございます。それは動作します! –