在使用caffe进行训练时,为什么“训练净输出”损失和“迭代损失”是相同的?

时间:2016-10-16 16:57:25

标签: machine-learning neural-network deep-learning caffe gradient-descent

我正在使用caffe训练AlexNet使用我自己的数据。我看到的一个问题是“训练净输出”损失和“迭代丢失”在训练过程中几乎相同。而且,这种损失有波动。 像:

...
...Iteration 900, loss 0.649719
...    Train net output #0: loss = 0.649719 (* 1 = 0.649719 loss ) 
...    Iteration 900, lr = 0.001
...Iteration 1000, loss 0.892498
...    Train net output #0: loss = 0.892498 (* 1 = 0.892498 loss ) 
...    Iteration 1000, lr = 0.001
...Iteration 1100, loss 0.550938
...    Train net output #0: loss = 0.550944 (* 1 = 0.550944 loss ) 
...    Iteration 1100, lr = 0.001
...
  1. 我应该看到这种波动吗?
  2. 如您所见,报告的损失之间的差异并不显着。它在训练中是否显示出问题?
  3. 我的solver是:

    net: "/train_val.prototxt"
    test_iter: 1999
    test_interval: 10441
    base_lr: 0.001
    lr_policy: "step"
    gamma: 0.1
    stepsize: 100000
    display: 100
    max_iter: 208820
    momentum: 0.9
    weight_decay: 0.0005
    snapshot: 10441
    snapshot_prefix: "/caffe_alexnet_train"
    solver_mode: GPU
    

1 个答案:

答案 0 :(得分:5)

  1. Caffe使用Stochastic Gradient Descent (SGD)方法训练网络。从长远来看,损失会减少,但在本地,损失有点波动是完全正常的。
  2. 报告的"迭代损失" 是您网络中所有损失层的加权和,平均值超过average_loss次迭代。另一方面,报告的"列车净输出......" 仅报告当前迭代的每个净输出。
    在您的示例中,您未在average_loss中设置'solver',因此默认情况下设置为average_loss=1。由于您只有一个损失输出loss_weight=1报告的&#34;列车净输出...&#34; &#34;迭代丢失&#34; < / em>是相同的(达到显示精度)。
  3. 总结:你的输出完全正常。