http://blog.csdn.net/xizero00/article/details/52529341
将这篇博客所讲进行了实现
1.LayerParameter也在caffe.proto文件中
2.头文件直接复制博客的,命名为image_scale_layer.hpp,然后放在caffe/include/caffe/layers下
3.实现文件也是直接复制博客的,命名为image_scale_layer.cpp,放在caffe/src/caffe/layers下
4.制作minist的lmdb数据,放在examples/mnist下,这个部分另一篇博客已经总结
5.在examples目录下创建文件夹imagescale,复制博客中网络的prototxt,并放在这个目录下
6.复制博客中solver的prototxt,放在examples/imagescale目录下
7.复制博客的bash文件,放在caffe目录下。然后运行这个bash文件就完成
按照博客的流程, 最后在运行shell脚本时出现了错误:
我的solver的确在那个目录下,我也不知道为何会报这个错误。之后我将脚本的命令直接输入在终端,即:
./build/tools/caffe train --solver=examples/imagescale/solver.prototxt
会出现以下错误
这时我反应过来应该是我没有生成mnist_train_lmdb这个文件,按照之前博客的方式生成之后再执行这个命令就正确了。但执行那个脚本还是报一样的错误。
之前我按照上一个博客的命令sudo sh ./examples/mnist/create_mnist.sh 生成mnist_train_lmdb,会报下面的错误:
因为我是远程访问的服务器,所以会造成现在这种permission denied的情况
总结整个流程:1.实现自己层的.hpp文件,并放在include/caffe/layers目录下
2.实现自己层的.cpp或.cu,并放在src/caffe/layers目录下。注意:
需要在.cpp添加注册的宏定义:1.INSTANTIATE_CLASS(MyNeuronLayer);
2.REGISTER_LAYER_CLASS(MyNeuron);
如果有my_neuron_layer.cu,则添加:INSTANTIATE_LAYER_GPU_FUNCS(MyNeuronLayer);
都是在cpp的末尾加
如果不加,会报以下错误:
3.修改src/caffe/proto/caffe.proto文件,这个文件要修改两个地方:在LayerParameter加ID号,添加实现类所需要的参数。这样你在编写 train.prototxt 或者 test.prototxt 或者 deploy.prototxt 时就能把新 Layer 的描述写进去,便于修改网络结构和替换其他相同功能的 Layer 了
4.编译
5.你还可以在src/caffe/test/中增加layer的测试代码,对所写的layer前传和反传进行测试,就像另一篇自己写的博客caffe单独测试添加的layer,但写测试代码
有点麻烦
http://www.cnblogs.com/zf-blog/p/6551278.html
中间写的过程怎么知道自己写的正确不正确,怎么去debug是我需要继续思考的