修改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获取

(2)卷积层和全连接层中weight_filler{}与bias_filler{}两个参数不用再填写,因为这两个参数的值,由已经训练好的模型*.caffemodel文件提供。将train_val.prototxt文件中的weight_filler、bias_filler全部删除。

(3)deploy.prototxt文件的构造和train_val.prototxt文件的构造最为明显的不同点是,deploy文件没有test网络中的test模块,只有训练模块,将accuracy层整个删除即可

(4)将损失层的“name”改为 prob ,“type”改为 softmax,并删除标签

layer {
  name: "prob"
  type: "Softmax"
  bottom: "fc"
  top: "softmax"
}

参考:https://blog.csdn.net/lg1259156776/article/details/52550865

猜你喜欢

转载自blog.csdn.net/swiftfake/article/details/80046480
今日推荐