【问题标题】:Training caffe library and Loss does not converge训练caffe库和Loss不收敛
【发布时间】:2018-04-25 18:03:12
【问题描述】:

我使用caffe 进行识别,但我遇到了丢失数据永远不会收敛的问题。

我在配置中的训练参数是

      Conf.base_lr = 0.2;          
      Conf.max_iter = 800001;
      Conf.test_iter = 100;
      Conf.test_interval = 1000;
      Conf.momentum = 0.5;
      Conf.random_seed = 2;
      Conf.clip_gradients = 0.1;
      Conf.gamma = 0.8;
      Conf.stepsize = 100000;
      Conf.weights = "";
      //logging
      Conf.display_interval = 100;
      Conf.snapshot_prefix_folder = "../tmp";
      Conf.snapshot_interval = 10000;
      Conf.schematic_path = "../tmp/reinspect.png";
      Conf.graph_prefix = "../tmp/history";
      Conf.log_file = "../tmp/log_brainwash.txt";
      Conf.graph_interval = 500;
      //net
      Conf.init_range = 0.1;

然后当我检查后向数据时

All net params (data, diff): L1 norm = (208684, 3.43485e+11); L2 norm = (135.231, 3.96399e+08)

L1 和 L2 范数的差异值很大且不正常。我的配置参数有什么问题以及如何调整它们?

我的一些前向和后向日志数据可以在这个link 中看到。

编辑:

以前我有一些层不包含在反向传播中的问题。所以现在我强制它们,除了没有像 Input 和 DummyData 这样的底层之外,所有这些都包括在内。它们如下所示。 此开发与此Lib 的实现类似(仅 Python 和 C++ 不同)。它们包括反向传播中的所有这些层,DummyData 是 Python 中的 NumpyData 在它们的实现中。如有必要,如何将它们包含到反向传播中。

layer {
  name: "image"
  type: "Input"
  top: "image"
  input_param { shape: { dim: 1 dim: 3 dim: 480 dim: 640 } }
}
layer {
  name: "box_flags"
  type: "Input"
  top: "box_flags"
  input_param { shape: { dim: 300 dim: 1 dim: 5 dim: 1 } }
}

layer {
  name: "boxes"
  type: "Input"
  top: "boxes"
  input_param { shape: { dim: 300 dim: 4 dim: 5 dim: 1 } }
}


layer {
  name: "lstm_hidden_seed"
  type: "DummyData"  
  top: "lstm_hidden_seed"
  dummy_data_param {
    shape { dim: 300 dim: 250 }  
    data_filler { type: "constant" value: 0 } 
  }
}
layer {
  name: "lstm_mem_seed"
  type: "DummyData"  
  top: "lstm_mem_seed"
  dummy_data_param {
    shape { dim: 300 dim: 250 }  
    data_filler { type: "constant" value: 0 } 
  }
}

DummyData层在Python中是NumpyData,当我转换成C++时,它变成了初始化数据为0的DummyData。

我是否需要将所有这些 Input 和 DummyData 包含到反向传播中? 我在 L1 和 L2 范数上仍然有这个异常的大值。

[Backward] All net params (data, diff): L1 norm = (208696, 4.09333e+06); L2 norm = (135.23, 4791.7)

【问题讨论】:

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


    【解决方案1】:

    您的学习率非常高,导致您的优化过程出现分歧。尝试将其减少至少 50 倍并重新开始训练。

    【讨论】:

    • 谢谢,我的 L1 norm 和 L2 norm diff 值有意义吗?即使我将学习率更改为 0.004,我仍然有 10^+10 的非常高的差异值。这有意义吗?
    • @batuman 没有。这些是非常大的值。您是否从第一次迭代中就获得了这些值?
    • 是的,我经过了几次迭代,比如 L1 norm = (208684, 1.00823e+06); L2 范数 = (135.231, 1157.83)。哪里有问题?
    • @batuman 这意味着您的渐变会迅速爆炸。 (1) 试试base_lr: 1e-5。 (2)用较低的标准初始化你的权重。 (3) 减少你的损失层的loss_weight
    • 对不起。我在哪里进行权重初始化?我在哪里可以减少 loss_weight?我在更新动量=0.5,clip_gradients=0.1,weight_decay=0.0,base_lr=1e-5,gamma=0.8,iterator,stepsize=100000中有这些值
    猜你喜欢
    • 1970-01-01
    • 2018-04-12
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2020-12-28
    • 2017-10-12
    • 2018-03-30
    相关资源
    最近更新 更多