我正在尝试训练网络,而是使用lmdb或leveldb,我正在将数据提供给我的网络。所以我遵循下面概述的程序
solver.net.set_input_arrays(batch,labels)
solver.step(1)
此解算器的类型为SGDSolver。现在我的问题是solver.solve()
和solver.step()
之间有什么区别?
2,这种方法不允许我为测试网络提供内存数据层。对此有什么解决方法吗?
我的solver.prototxt看起来像
net: "/path/to/train_val.prototxt"
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 100000
display: 20
max_iter: 450000
momentum: 0.9
weight_decay: 0.0005
snapshot: 10000
snapshot_prefix: "/path/to/temporal_net_train"
solver_mode: GPU
使用我的方法,每20次迭代网络显示一些输出损失等。不知何故,损失在某些数量的迭代中保持不变,这可能是原因。
答案 0 :(得分:0)
解决执行整个训练,达到您设置的任何限制 - 通常是迭代限制。 步骤仅执行指定的迭代次数。
如果您没有阅读支持的数据通道/格式,我认为您必须编写客户输入例程(您的数据包)。
根据周围的影响,有几种可能性。如果损失只显示一个值,那么你的反向传播可能是罪魁祸首。也许您没有正确连接到数据集,并且您没有获得预期的分类。
如果损失具有暂时的稳定性,但随后趋于收敛,请不要担心;这可能是培训订购的结果。
如果损失适当下降然后稳定在一个固定值,那么你也表现良好:训练在迭代用完之前收敛。