Python 深度学习-一些关于caffe的天真问题

Python 深度学习-一些关于caffe的天真问题,python,neural-network,deep-learning,caffe,pycaffe,Python,Neural Network,Deep Learning,Caffe,Pycaffe,我试图理解caffe的基础知识,特别是与python一起使用 我的理解是模型定义(比如给定的神经网络架构)必须包含在'.prototxt'文件中 当您使用'.prototxt'对模型进行数据训练时,将权重/模型参数保存到'.caffemodel'文件中 此外,用于培训的'.prototxt'文件(包括学习率和正则化参数)与用于测试/部署的文件(不包括它们)之间存在差异 问题: '.prototxt'是培训的基础,这是否正确 '.caffemodel'是使用 培训数据上的“.prototxt” 有

我试图理解caffe的基础知识,特别是与python一起使用

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

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

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

问题:

  • '.prototxt'
    是培训的基础,这是否正确
    '.caffemodel'
    是使用 培训数据上的“.prototxt”
  • 有一个用于培训的
    '.prototxt'
    和一个用于 测试中,只有轻微的差异(学习率 和正则化因子),但 架构(假设你使用神经网络)是一样的吗

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

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

    • :此文件描述培训阶段的网络体系结构
    • :此文件描述测试时的网络体系结构(“部署”)
    • :此文件非常小,包含用于培训的“元参数”。比如,这个,
    train_val.prototxt
    deploy.prototxt
    表示的网络体系结构应该大致相似。两者之间没有什么主要区别:

    • 输入数据:在培训期间,通常使用预定义的输入集进行培训/验证。因此,
      train\u val
      通常包含一个显式输入层,例如,
      “HDF5Data”
      层或
      “Data”
      层。另一方面,
      deploy
      通常事先不知道将获得什么输入,它只包含一条语句:

      input: "data"
      input_shape {
        dim: 10
        dim: 3
        dim: 227
        dim: 227
      }
      
      它声明了网络需要什么输入以及它的维度应该是什么。
      或者,可以放置一个层:

    • 输入标签:在培训期间,我们向网络提供“地面真相”预期输出,在
      部署期间,这些信息显然不可用
      
    • 损耗层:在培训期间,必须定义损耗层。该层告诉解算器在每次迭代时应调整参数的方向。这一损失将网络当前的预测与预期的“地面真相”相比较。损失的梯度会传播回网络的其余部分,这就是学习过程的驱动力。在
      部署期间
      没有丢失和反向传播
    在caffe中,您提供一个
    train_val.prototxt
    来描述网络、train/val数据集和损失。此外,还提供了一个描述培训元参数的
    solver.prototxt
    。训练过程的输出是一个包含网络训练参数的
    .caffemodel
    二进制文件。

    网络训练完成后,您可以使用
    deploy.prototxt
    .caffemodel
    参数来预测新的和看不见的输入的输出。

    是的,但是.prototxt文件的类型不同 比如说

    这是针对培训和测试网络的

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


    请限制您在每篇文章中只回答一个问题。这太宽了。嗨,马特,我明白了。我删除了问题3,这是最广泛的一个。我留下了两个问题,但它们是高度相关的是/否问题-希望这是可以的。对于您关于使用python接口“解决”的其他问题,您可能会觉得相关。非常感谢Shai,非常好的提示。非常感谢Shai。这是一个令人敬畏的回应。不可能要求更好的解释。
    layer {
      name: "input"
      type: "Input"
      top: "data"
      input_param { shape { dim: 10 dim: 3 dim: 227 dim: 227 } }
    }