CNN中的前向网络

forward network in CNN

我是深度学习新手。我用caffe的时候发现有两个prototxt文件,一个是"deploy",一个是"train_val".
我知道 "train_val" 是用来训练模型的。但是对于 "deploy" 文件,有些人说它是用于测试图像的。
所以,我的问题是 "deploy" 是否只有 forward() 网络,所以测试图像数据只通过前向网络一次以获得分数?

理想情况下它应该是这样工作的,但是文件只是网络 definition.You 可以使用一个文件来训练并且 test.You 必须指定您希望某些斑点处于哪个阶段可用,意味着你可以定义两个输入数据层,一个在训练期间使用,另一个用于测试并指定相应的阶段,如下所示:

 name: "MyModel"
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    mirror: false
    crop_size: 227
    mean_file: "data/train_mean.binaryproto" # location of the training data mean
  }
  data_param {
    source: "data/train_lmdb" # location of the training samples
    batch_size: 128 # how many samples are grouped into one mini-batch
    backend: LMDB
  }
}
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }

在训练过程中,将使用前一层,而第二层将被忽略。 在测试阶段,第一层将被忽略,第二层将被用作测试的输入。

另一点是,在测试期间,我们需要预测的准确性,因为我们不再需要更新权重 我

layer {
  name: "accuracy"
  type: "Accuracy"
  bottom: "fc8"
  bottom: "label"
  top: "accuracy"
  include {
    phase: TEST
  }
}
layer {
  name: "loss"
  type: "SoftmaxWithLoss"
  bottom: "fc8"
  bottom: "label"
  top: "loss"
}

如果未给出 include 指令,则该层包含在所有阶段中。

虽然您也可以在训练期间包括准确性层以查看输出的情况(即:用于测量迭代次数后的准确性改进),但我们在预测时更需要它。 在你的求解器中,你可以指定 test_iter 来指定在多少次迭代测试操作之后将被执行(你验证你的模型每 test_iter 次迭代)

train_val 和部署文件将这两个阶段分成两个不同的 files.All 规范 train_val 与训练阶段相关。并为 testing.I 部署我不确定,train_val 组合来自哪里,但我想这是因为你可以在 test_iter 之后验证你的模型并继续从那里。 由于您不需要测试期间的损失,而不是概率,您可以使用 softmax 作为概率输出函数,而不是部署中的 softmaxwithloss,或者您可以同时定义两者。 caffe 测试命令执行前向操作但不执行后向()(反向传播)operation.I希望它有帮助

正如您已经注意到的,有一些
一个关键区别是 'deploy.prototxt' 通常缺少任何损失层。
当你没有为网络定义损失函数时,反向传播就没有意义:你会传播什么梯度?什么函数的梯度?

因此,caffe 中的一个 net 对象为所有阶段实现了 backward() 方法。然而,当您在没有损失函数(仅预测)的情况下测试网络时,此方法毫无意义。