深入学习一些关于

2024-05-06 23:03:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图了解caffe的基本知识,特别是在python中的使用。在

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

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

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

问题:

  1. 是不是'.prototxt'是培训的基础,而且 '.caffemodel'是训练(权重)的结果,使用 '.prototxt'关于训练数据?在
  2. 有一个'.prototxt'用于培训,一个用于 在测试中,只有很小的差异(学习率 和正规化因素有关的训练),但是神经网络 架构(假设你使用神经网络)是一样的?在

很抱歉这些基本问题和一些非常不正确的假设,我正在做一些在线调查,以上几行总结了我迄今为止的理解。在


Tags: 文件数据模型参数定义架构部署神经网络
2条回答

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

  • ^{}:这个文件描述了训练阶段的网络体系结构。在
  • ^{}:这个文件描述了测试时的网络体系结构(“部署”)。在
  • ^{}:这个文件非常小,包含用于训练的“元参数”。例如,learning rate policyregulariztion

train_val.prototxtdeploy.prototxt表示的网络体系结构应该基本相似。两者之间几乎没有什么主要区别:

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

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

    它声明了网络需要什么输入以及它的维度是什么。
    或者,可以放置^{}层:

    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参数来预测新的和未看到的输入的输出。在

是的,但是.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

相关问题 更多 >