之前用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 区别相关推荐

  1. 浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别

    浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别 标签: caffe深度学习CaffeNet 2016-11-02 16:10 1203人阅读 评论(1) ...

  2. Caffe中的一些概念

    有一天,师姐问我,epoch和iteration有什么区别?我一时语塞,竟然遍寻百度而不得,最后在stackoverflow上找到一个我认为比较靠谱的答案,虽然它不是最高票,但是是最好理解的,深得我心 ...

  3. train_val.prototxt文件和deploy.prototxt文件开头的区别

    1.开头不同 对train_val.prototxt文件来说,开头部分定义训练和测试的网络及参数 对deploy.prototxt文件来说,开头部分定义实际运用场景的配置文件,其参数不定义数据来源,仅 ...

  4. caffe将用训练好的caffemodel和train_val.prototxt文件分类新的一张图片-下篇--caffe学习(7)

    接上篇caffe将用训练好的caffemodel和train_val.prototxt文件分类新的一张图片-上篇 得到deploy.prototxt文件之后,我们可以自己编写python代码实现对单个 ...

  5. caffe中solver.prototxt文件参数解释

    在训练或者微调网络时我们需要设置一些参数,在caffe中这些参数保存在sovler.prototxt文件中(当然这只是一个文件名,你也可以随意换成其他的名称).在下面的代码中以注释的形式解释每一个参数 ...

  6. 微调︱caffe中fine-tuning模型三重天(函数详解、框架简述)+微调技巧

    本文主要参考caffe官方文档[<Fine-tuning a Pretrained Network for Style Recognition>](http://nbviewer.jupy ...

  7. 多线程 python layer_在Caffe中加Python Layer的方法

    Author: Zongwei Zhou | 周纵苇 Weibo: @MrGiovanni Email: zongweiz@asu.edu Acknowledgement: Md Rahman Sid ...

  8. 【深度学习】caffe 中的一些参数介绍

     [深度学习]caffe 中的一些参数介绍 标签: 深度学习caffe 2016-05-30 14:33 7122人阅读 评论(1) 收藏 举报 本文章已收录于: 分类: [机器学习&深度 ...

  9. caffe 中base_lr、weight_decay、lr_mult、decay_mult代表什么意思?

    在机器学习或者模式识别中,会出现overfitting,而当网络逐渐overfitting时网络权值逐渐变大,因此,为了避免出现overfitting,会给误差函数添加一个惩罚项,常用的惩罚项是所有权 ...

  10. caffe中的Accuracy

    Caffe 中的 Accuracy 是precision,即: 理解为你预测对的正例数,占预测正例总量的比率 如果要输出recall,而不是precision,accuracy_param里面有一个i ...

最新文章

  1. Java项目:成绩管理系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
  2. 线程基类的构建与代码实践
  3. 参数验证 @Validated 和 @Valid 的区别,Java Web 开发必备。
  4. css点击a标签显示下划线_好程序员HTML5培训教程-html和css基础知识
  5. [How TO]-ubuntu20.10上安装Pulse Secure客户端
  6. 【Java 笔记】 java 格式化输出
  7. 文本情感分析(介绍文章)--总结
  8. 微信小程序开发(3.选项卡)
  9. 为游戏多开做准备,降低游戏的CPU
  10. 【元胞自动机】基于元胞自动机实现单边教室人群疏散含Matlab源码
  11. matlab整流仿真,基于MATLAB的整流电路的建模与仿真
  12. 【Scratch考级99图】图36-等级考试scratch绘制复杂图形中间带凸点正方形花 少儿编程 scratch画图案例教程
  13. 小班安全使用计算机教案,幼儿园小班安全教案(精选5篇)
  14. 防火墙、DCD与TCP Keep alive
  15. java控制鼠标操作一些重复的事情
  16. Python——爬虫抓取图片
  17. Pytorch 安装(CPU)
  18. C++ 标准模板库(STL)汇总
  19. 栈 括号匹配问题(C语言)
  20. html 中输入千分号、万分号

热门文章

  1. Android Q Labs| Android Q 分区存储
  2. mysql中alter语句卡死的一个解决方法
  3. 电商购物网站 - 需求与设计
  4. 几句话就能让你明白:热备份路由选择协议(HSRP)
  5. 【IBM Tivoli Identity Manager 学习文档】3 基本架构
  6. javascript 之牛人感悟,必看学习
  7. Dojo学习2 dojo快速安装
  8. 「日常温习」Hungary算法解决二分图相关问题
  9. Linux下文件操作命令cat(转)
  10. centos 7下安装mysql