2016-08-15 2 views
1

SigmoidCrossEntropyLossLayer를 내 버전으로 수정하려고합니다. 나는 .cpp 버전 만 구현했다. 이미 SigmoidCrossEntropyLossLayer의 .cu 파일이 있었고 backward_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&)' 

사람이 어떻게 CAFFE이 하나의 .CU 파일을 무시 있도록 알고 있나요? 내 프로젝트에서 더 이상 사용하고 싶지 않습니다. 고마워요!

+0

backward_gpu에서 backward_cpu를 호출하는 방법을 찾았습니다. 나는이 방법으로 그것을 할 수 있지만 여전히 달성하기위한 깔끔한 방법이 있는지 궁금합니다. –

답변

0

sigmoid_cross_entropy_loss_layer.hpp 파일에서 Backward_gpuForward_gpu 선언을 제거하기 만하면됩니다.

.cu 파일에는 이러한 가상 함수에 대한 정의가 있으므로 .cu 파일을 제거하면 구현이없는 가상 함수 선언이 나타납니다. 당신이 선언을 제거하기 때문에 CAFFE가 깨질 것이이 같은 *_gpu 기능에 대한 스텁을 생성하지 않는 컴파일러를 보장

#ifdef CPU_ONLY 
STUB_GPU(WARPLossLayer); 
#endif 

:

또한 sigmoid_cross_entropy_loss_layer.cpp 파일에서 다음 줄을 제거해야합니다 헤더 파일에.

또한 그에 따라 테스트를 편집해야합니다.

+0

정말 고마워요. 그게 효과가있어! –