【问题标题】:deep learning - a number of naive questions about caffe深度学习——关于caffe的一些幼稚问题
【发布时间】:2016-04-30 11:14:41
【问题描述】:

我正在尝试了解 caffe 的基础知识,尤其是与 python 一起使用。

我的理解是模型定义(比如给定的神经网络架构)必须包含在'.prototxt' 文件中。

当您使用'.prototxt' 对数据进行模型训练时,您会将权重/模型参数保存到'.caffemodel' 文件中

此外,用于训练的'.prototxt' 文件(包括学习率和正则化参数)与用于测试/部署的文件之间存在差异,不包括它们。

问题:

  1. '.prototxt' 是训练的基础是否正确? '.caffemodel' 是训练的结果(权重),使用 '.prototxt' 在训练数据上?
  2. 有一个'.prototxt' 用于训练和一个用于 测试,并且只有微小的差异(学习率 和正则化因素),但 nn 架构(假设您使用神经网络)是否相同?

对这些基本问题和可能的一些非常不正确的假设表示歉意,我正在做一些在线研究,上面的几行总结了我迄今为止的理解。

【问题讨论】:

  • 请在每个帖子中限制自己一个问题。这太宽泛了。
  • 嗨,马特,我明白了。我删除了问题 3,这是最广泛的问题。我留下了两个问题,但它们是高度相关的是/否问题 - 希望这没问题。
  • 关于使用python接口“解决”的其他问题,您可能会发现this answer相关。
  • 非常感谢 Shai,很棒的提示。

标签: python neural-network deep-learning caffe pycaffe


【解决方案1】:

让我们看一下 BVLC/caffe 提供的示例之一:bvlc_reference_caffenet
你会注意到实际上有 3 '.prototxt' 文件:

train_val.prototxtdeploy.prototxt代表的网络架构应该大体相似。两者之间的主要区别很少:

  • 输入数据:在训练期间,通常使用一组预定义的输入进行训练/验证。因此,train_val 通常包含一个显式输入层,例如,"HDF5Data" 层或"Data" 层。另一方面,deploy 通常不会提前知道它会得到什么输入,它只包含一个语句:

    input: "data"
    input_shape {
      dim: 10
      dim: 3
      dim: 227
      dim: 227
    }
    

    声明网络期望的输入及其尺寸。
    或者,可以放置一个"Input" 层:

    layer {
      name: "input"
      type: "Input"
      top: "data"
      input_param { shape { dim: 10 dim: 3 dim: 227 dim: 227 } }
    }
    
  • 输入标签:在训练期间,我们为网络提供“真实”预期输出,在deploy 期间显然无法获得此信息。
  • 损失层:在训练期间必须定义一个损失层。这一层告诉求解器在每次迭代时它应该在哪个方向调整参数。这种损失将网络的当前预测与预期的“基本事实”进行比较。损失的梯度被反向传播到网络的其余部分,这就是驱动学习过程的原因。在deploy 期间,没有损失,也没有反向传播。

在 caffe 中,您提供一个 train_val.prototxt 描述网络、train/val 数据集和损失。此外,您还提供了一个solver.prototxt,描述了用于训练的元参数。训练过程的输出是一个.caffemodel 二进制文件,其中包含训练后的网络参数。
网络训练完成后,您可以使用 deploy.prototxt.caffemodel 参数来预测新输入和未见过输入的输出。

【讨论】:

  • 非常感谢 Shai。这是一个很棒的回应。不能要求更好的解释了。
【解决方案2】:

是的,但是有不同类型的 .prototxt 文件 例如

https://github.com/BVLC/caffe/blob/master/examples/mnist/lenet_train_test.prototxt

这是用于训练和测试网络

对于命令行训练,ypu 可以使用求解器文件,例如也是 .prototxt 文件

https://github.com/BVLC/caffe/blob/master/examples/mnist/lenet_solver.prototxt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 2017-10-22
    相关资源
    最近更新 更多