我使用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;
然后当我检查Backward数据时
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 ++时,它被更改为DummyData,初始化数据为0。
我是否需要将所有Input和DummyData包含在向后传播中? 在L1和L2规范中我仍然有这个异常的大值。
[Backward] All net params (data, diff): L1 norm = (208696, 4.09333e+06); L2 norm = (135.23, 4791.7)
答案 0 :(得分:0)
您的学习率非常高,使您的优化过程发生分歧。尝试将其减少至少50倍并重新开始训练。