Caffe中deploy.prototxt 和 train_val.prototxt 区别
之前用deploy.prototxt 还原train_val.prototxt过程中,遇到了坑,所以打算总结一下
本人以熟悉的LeNet网络结构为例子
不同点主要在一前一后,相同点都在中间
train_val.prototxt 中的开头
看这个名字也知道,里面定义的是训练和验证时候的网络,所以在开始的时候要定义训练集和验证集的来源
name: "LeNet"
layer {
name: "mnist"
type: "Data"
top: "data"
top: "label"include {
phase: TRAIN}transform_param {
scale: 0.00390625}data_param {# 这里定义了之前将数据集转成lmdb数据格式的文件位置
source: "examples/mnist/mnist_train_lmdb"# 这个定义了一次行送入网络的图像个数
batch_size: 64
backend: LMDB}
}
layer {
name: "mnist"
type: "Data"
top: "data"
top: "label"include {
phase: TEST}transform_param {
scale: 0.00390625}data_param {# 这里定义了验证集的数据来源
source: "examples/mnist/mnist_test_lmdb"
batch_size: 100
backend: LMDB}
}
deploy.prototxt 中的开头
看这个名字也知道,这个配置文件适用于部署,也就是用于实际场景时候的配置文件,所以开始的时候不必在定义数据集的来源,但是需要定义输入数据的大小格式。
name: "LeNet"
layer {
name: "data"
type: "Input"
top: "data"# 输入数据的batch size, channel, width, heightinput_param { shape: { dim: 64 dim: 1 dim: 28 dim: 28 } }
}
train_val.prototxt 中的结尾
如果是一般的卷积网络的话,最后面都是用一个全连接,将feature map 转成固定长度的向量,然后输出种类的个数。所以在最后的时候,需要说明输出种类的个数。
layer {
name: "ip2"
type: "InnerProduct"
bottom: "ip1"
top: "ip2"param {
lr_mult: 1}param {
lr_mult: 2}inner_product_param {# 在这里定义了输出种类的个数
num_output: 10weight_filler {
type: "xavier"}bias_filler {
type: "constant"}}
}
因为这里面包含了验证的部分,验证的时候,需要输出结果的准确率,所以需要定义准确率的输出。
layer {
name: "accuracy"
type: "Accuracy"
bottom: "ip2"
bottom: "label"
top: "accuracy"include {
phase: TEST}
}
最后还有一个不同就是,因为是训练模型,所以包括forward和backward,所以最后需要定义一个损失函数。这里用的是SoftmaxWithLoss,而在deploy.prototxt,因为只有forward,所以定义的是Softmax,也就是分类器。
layer {
name: "loss"# 定义的是损失函数
type: "SoftmaxWithLoss"
bottom: "ip2"
bottom: "label"
top: "loss"
}
deploy.prototxt 中的最后
这里定义了Softmax分类器,输出最后各类的概率值。
layer {
name: "prob"# 定义的是分类器
type: "Softmax"
bottom: "ip2"
top: "prob"
}
train_val.prototxt 和 deploy.prototxt中间部分
两个的中间部分都是一样的,定义了一些卷积、激活、池化、Dropout、LRN(local response normalization)、全连接等操作。
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"param {
lr_mult: 1}param {
lr_mult: 2}convolution_param {
num_output: 20
kernel_size: 5
stride: 1weight_filler {
type: "xavier"}bias_filler {
type: "constant"}}
}
layer {
name: "pool1"
type: "Pooling"
bottom: "conv1"
top: "pool1"pooling_param {
pool: MAX
kernel_size: 2
stride: 2}
}
layer {
name: "conv2"
type: "Convolution"
bottom: "pool1"
top: "conv2"param {
lr_mult: 1}param {
lr_mult: 2}convolution_param {
num_output: 50
kernel_size: 5
stride: 1weight_filler {
type: "xavier"}bias_filler {
type: "constant"}}
}
layer {
name: "pool2"
type: "Pooling"
bottom: "conv2"
top: "pool2"pooling_param {
pool: MAX
kernel_size: 2
stride: 2}
}
layer {
name: "ip1"
type: "InnerProduct"
bottom: "pool2"
top: "ip1"param {
lr_mult: 1}param {
lr_mult: 2}inner_product_param {
num_output: 500weight_filler {
type: "xavier"}bias_filler {
type: "constant"}}
}
layer {
name: "relu1"
type: "ReLU"
bottom: "ip1"
top: "ip1"
}
layer {
name: "ip2"
type: "InnerProduct"
bottom: "ip1"
top: "ip2"param {
lr_mult: 1}param {
lr_mult: 2}inner_product_param {
num_output: 10weight_filler {
type: "xavier"}bias_filler {
type: "constant"}}
}
Caffe中deploy.prototxt 和 train_val.prototxt 区别相关推荐
- 浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别
浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别 标签: caffe深度学习CaffeNet 2016-11-02 16:10 1203人阅读 评论(1) ...
- Caffe中的一些概念
有一天,师姐问我,epoch和iteration有什么区别?我一时语塞,竟然遍寻百度而不得,最后在stackoverflow上找到一个我认为比较靠谱的答案,虽然它不是最高票,但是是最好理解的,深得我心 ...
- train_val.prototxt文件和deploy.prototxt文件开头的区别
1.开头不同 对train_val.prototxt文件来说,开头部分定义训练和测试的网络及参数 对deploy.prototxt文件来说,开头部分定义实际运用场景的配置文件,其参数不定义数据来源,仅 ...
- caffe将用训练好的caffemodel和train_val.prototxt文件分类新的一张图片-下篇--caffe学习(7)
接上篇caffe将用训练好的caffemodel和train_val.prototxt文件分类新的一张图片-上篇 得到deploy.prototxt文件之后,我们可以自己编写python代码实现对单个 ...
- caffe中solver.prototxt文件参数解释
在训练或者微调网络时我们需要设置一些参数,在caffe中这些参数保存在sovler.prototxt文件中(当然这只是一个文件名,你也可以随意换成其他的名称).在下面的代码中以注释的形式解释每一个参数 ...
- 微调︱caffe中fine-tuning模型三重天(函数详解、框架简述)+微调技巧
本文主要参考caffe官方文档[<Fine-tuning a Pretrained Network for Style Recognition>](http://nbviewer.jupy ...
- 多线程 python layer_在Caffe中加Python Layer的方法
Author: Zongwei Zhou | 周纵苇 Weibo: @MrGiovanni Email: zongweiz@asu.edu Acknowledgement: Md Rahman Sid ...
- 【深度学习】caffe 中的一些参数介绍
[深度学习]caffe 中的一些参数介绍 标签: 深度学习caffe 2016-05-30 14:33 7122人阅读 评论(1) 收藏 举报 本文章已收录于: 分类: [机器学习&深度 ...
- caffe 中base_lr、weight_decay、lr_mult、decay_mult代表什么意思?
在机器学习或者模式识别中,会出现overfitting,而当网络逐渐overfitting时网络权值逐渐变大,因此,为了避免出现overfitting,会给误差函数添加一个惩罚项,常用的惩罚项是所有权 ...
- caffe中的Accuracy
Caffe 中的 Accuracy 是precision,即: 理解为你预测对的正例数,占预测正例总量的比率 如果要输出recall,而不是precision,accuracy_param里面有一个i ...
最新文章
- Java项目:成绩管理系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
- 线程基类的构建与代码实践
- 参数验证 @Validated 和 @Valid 的区别,Java Web 开发必备。
- css点击a标签显示下划线_好程序员HTML5培训教程-html和css基础知识
- [How TO]-ubuntu20.10上安装Pulse Secure客户端
- 【Java 笔记】 java 格式化输出
- 文本情感分析(介绍文章)--总结
- 微信小程序开发(3.选项卡)
- 为游戏多开做准备,降低游戏的CPU
- 【元胞自动机】基于元胞自动机实现单边教室人群疏散含Matlab源码
- matlab整流仿真,基于MATLAB的整流电路的建模与仿真
- 【Scratch考级99图】图36-等级考试scratch绘制复杂图形中间带凸点正方形花 少儿编程 scratch画图案例教程
- 小班安全使用计算机教案,幼儿园小班安全教案(精选5篇)
- 防火墙、DCD与TCP Keep alive
- java控制鼠标操作一些重复的事情
- Python——爬虫抓取图片
- Pytorch 安装(CPU)
- C++ 标准模板库(STL)汇总
- 栈 括号匹配问题(C语言)
- html 中输入千分号、万分号