【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层
一、自定义神经层
1.创建新定义的头文件,目录在caffe/include/caffe/layers/my_neuron_layer.hpp
我复制了conv_layer.hpp文件,然后在该文件的内容上进行更改
如果只是需要CPU方法,可以注释掉forward_gpu和backward_gpu
修改对照内容如下(左侧是conv_layer.hpp,右侧是my_neuron_layer.hpp):
2.创建对应的源文件,目录在caffe/src/caffe/layers/my_neuron_layer.cpp
重写LayerSetUp,实现能从 prototxt 读取参数
重写方法Reshape,如果对继承类没有修改的话,就不需要重写
重写方法Forward_cpu(这个一定需要重写)
重写方法Backward_cpu(非必须)
×如果要GPU支持,还需要创建src/caffe/layers/my_neuron_layer.cu,同理重写方法Forward_gpu/Backward_gpu(非必须)
my_neuron_layer.cpp 添加注册的宏定义
最终.cpp文件如下
3.caffe/src/caffe/proto/caffe.proto注册新的Layer
在caffe.proto中,先找到message LayerParameter{},在其中添加:
这里的150表示标志位,而不是赋值
然后添加一个自定义的parameter:
在message V1LayerParameter { }中定义类型:40是标志位
4.重新编译
直到编译完成
5.测试自定义的Layer
定义deploy.prototxt
运行测试程序:test_my_neuron.py
结果如下
二、自定义数据输入层
以image_data_layer为例进行讲解
1.创建新定义的头文件,目录在caffe/include/caffe/layers/my_neuron_layer.hpp
我复制了conv_layer.hpp文件,然后在该文件的内容上进行更改
修改对照内容如下(左侧是image_data_layer.hpp,右侧是my_data_layer.hpp):
2.创建对应的源文件,目录在caffe/src/caffe/layers/my_neuron_layer.cpp
下面只给出改动以后的my_data_layer.cpp代码
下面是caffe.proto文件的修改
测试新定义的数据层,使用原来的LeNet网络,把输入数据层做修改