Resnet 20 train_val.prototxt为deploy.prototxt

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 train_val.prototxt为deploy.prototxt_第1张图片

resnet-20-deploy 
Resnet 20 train_val.prototxt为deploy.prototxt_第2张图片
二.手动修改 
用代码生成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

你可能感兴趣的:(Resnet 20 train_val.prototxt为deploy.prototxt)