【深度学习框架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):

【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第1张图片






【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第2张图片



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 添加注册的宏定义

【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第3张图片


最终.cpp文件如下

【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第4张图片


3.caffe/src/caffe/proto/caffe.proto注册新的Layer

  在caffe.proto中,先找到message LayerParameter{},在其中添加:


  这里的150表示标志位,而不是赋值

  然后添加一个自定义的parameter:

【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第5张图片

  在message V1LayerParameter { }中定义类型:40是标志位



4.重新编译



【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第6张图片


直到编译完成


5.测试自定义的Layer

定义deploy.prototxt

【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第7张图片


运行测试程序:test_my_neuron.py


结果如下

【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第8张图片


二、自定义数据输入层

以image_data_layer为例进行讲解

1.创建新定义的头文件,目录在caffe/include/caffe/layers/my_neuron_layer.hpp

  我复制了conv_layer.hpp文件,然后在该文件的内容上进行更改

修改对照内容如下(左侧是image_data_layer.hpp,右侧是my_data_layer.hpp):

【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第9张图片


【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第10张图片


【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第11张图片


2.创建对应的源文件,目录在caffe/src/caffe/layers/my_neuron_layer.cpp

【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第12张图片


下面只给出改动以后的my_data_layer.cpp代码


【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第13张图片


【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第14张图片


【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第15张图片


下面是caffe.proto文件的修改


【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第16张图片




测试新定义的数据层,使用原来的LeNet网络,把输入数据层做修改


【深度学习框架Caffe学习与应用】第五课 自定义神经层和数据输入层_第17张图片




你可能感兴趣的:([caffe学习笔记])