当我们在caffe中开发了一个新层,new_layer.cpp
,new_layer.cu
和new.layer.hpp
时,我们必须重新编译caffe,是否可以只编译这个新的图层文件,比如对原始库的更新,还是我们必须重新编译整个库?有人可以给我一个暗示吗?
ADD:实际上我从github上的某个人的实现中下载了图层文件:https://github.com/farmingyard/ShuffleNet有.cpp
.cu
.hpp
个文件,我放.cpp
和{在.cu
中{1}},将caffe/src/caffe/layers
放入.hpp
,然后将caffe/include/caffe/layers/
添加为:
caffe.proto
也:
message LayerParameter {
...
optional ShuffleChannelParameter shuffle_channel_param = 164;
}
在proto文件的末尾,然后我在caffe根目录中调用message ShuffleChannelParameter {
optional uint32 group = 1[default = 1]; // The number of group
}
然后调用make clean
,没有错误,我检查了
make all
和
CXX src/caffe/layers/shuffle_channel_layer.cpp
和(我不知道这是否意味着原型文件已被重新编译)
NVCC src/caffe/layers/shuffle_channel_layer.cu
然后CXX .build_release/src/caffe/proto/caffe.pb.cc
,它给出了:
make proto
然后我调用make: Nothing to be done for proto
,没有错误提示,编译成功。然后我使用作者编写的示例原型文件文件,使用新图层进行示例网络,然后按照错误提示:
make pycaffe
完整Message type "caffe.LayerParameter" has no field named "shuffle_channel_param".
:
LayerParameter
答案 0 :(得分:1)
使用make
进行编译时,make
知道它已编译的源以及自上次构建以来发生了哪些更改。如果您只进行本地更改,make
将仅编译/链接已更改的源以及受其影响的内容(更改头文件可能需要编译#include
此标头的其他源。
也就是说,您不需要做任何特别的事情,只需继续使用make
如果你make clean
删除所有编译对象并强制make
从头开始重新编译整个项目。