train_val.prototxt为deploy.prototxt文件
一.内容简介
在caffe框架下的深度神经网络一般都会将train和val写在同一个prototxt文件中,然后执行solver文件进行调用执行,并得到最终的accuracy。val是验证的意思,在机器学习里,验证集是训练集的子集,但是我们在做测试的时候,测试集不能和训练集有交集。所有我们需要将train_val.prototxt文件修改成可以做测试的deploy.prototxt文件。在用caffe提取深度特征的时候也会用到deploy文件,这个在下一篇帖子里在接着讨论。
train_val.prototxt文件:训练与测试网络配置文件
deploy.prototxt文件:模型构造文件
这里用resnet-20网络进行演示
首先我们先画出resnet-20的train_val.prototxt网络和其deploy.protoxtx的模型构造。
在线可视化Caffe结构里prototxt格式的网络结构 :http://ethereon.github.io/netscope/#/editor
将描述神经网络结构的prototxt文件复制到左侧的编辑框里,按shift-enter,就可以直接以图形方式显示网络的结构
或者参考本人之前的一篇帖子,可以手动显示网络结构:https://blog.csdn.net/swiftfake/article/details/79698959
效果展示:
resnet-20
resnet-20-deploy
二.手动修改
用代码生成deploy文件比较麻烦。我们在构建深度学习网络时,肯定会先定义好训练与测试网络的配置文件——train_val.prototxt文件,我们可以通过修改train_val.prototxt文件 来生成 deploy 文件。
(1)deploy 文件中的数据层更为简单,即将*_train_test.prototxt文件中的输入训练数据lmdb与输入测试数据lmdb这两层删除,然后添加一个数据维度描述。内容如下:
input: "data"
input_dim: 1
input_dim: 3 #通道数,表示RGB三个通道
input_dim: 32 #图像的长和宽,通过 *_train_val.prototxt文件中数据输入层的crop_size获取
input_dim: 32 #图像的长和宽,通过 *_train_val.prototxt文件中数据输入层的crop_size获取
- 1
- 2
- 3
- 4
- 5
(2)删除网络中的data层
(3)卷积层和全连接层中weight_filler{}与bias_filler{}两个参数不用再填写,因为这两个参数的值,由已经训练好的模型*.caffemodel文件提供。将train_val.prototxt文件中的weight_filler、bias_filler全部删除。
(4)deploy.prototxt文件的构造和train_val.prototxt文件的构造最为明显的不同点是,deploy文件没有test网络中的test模块,只有训练模块,将accuracy层整个删除即可
(5)将损失层的“name”改为 prob ,“type”改为 softmax,并删除标签
layer {
name: "prob"
type: "Softmax"
bottom: "fc"
top: "softmax"
}
- 1
- 2
- 3
- 4
- 5
- 6
参考:https://blog.csdn.net/lg1259156776/article/details/52550865