在 Caffe 上,我正在尝试实现一个用于语义分割的全卷积网络。我想知道是否有一个具体的策略来设置你的'solver.prototxt'
以下超参数的值:
这是否取决于您的训练集的图像数量?如果是这样,怎么办?
为了以有意义的方式设置这些值,您需要更多有关数据的信息:
1. 训练集大小您拥有的训练示例总数,我们称之为数量T
.
2. 训练批量大小在单个批次中一起处理的训练示例的数量,这通常由输入数据层中的设置'train_val.prototxt'
。例如,在这个文件训练批量大小设置为 256。让我们将这个数量表示为tb
.
3. 验证集大小您为验证模型而预留的示例总数,让我们将其表示为V
.
4. 验证批量大小值设置在batch_size
用于测试阶段。在这个例子它被设置为 50。我们称之为vb
.
现在,在训练期间,您希望每隔一段时间就获得对网络性能的无偏估计。为此,您需要在验证集上运行网络test_iter
迭代。要覆盖整个验证集,您需要有test_iter = V/vb
.
您希望多久获得一次此估算?这真的取决于你。如果您有一个非常大的验证集和一个缓慢的网络,验证太频繁会使训练过程太长。另一方面,验证不够频繁可能会导致您无法注意到训练过程是否以及何时未能收敛。test_interval
确定您验证的频率:通常针对您设置的大型网络test_interval
在 5K 左右,对于更小更快的网络,您可以选择更低的值。再说一次,一切都取决于你。
为了覆盖整个训练集(完成一个“纪元”),您需要运行T/tb
迭代。通常一个人会训练几个时期,因此max_iter=#epochs*T/tb
.
关于iter_size
:这允许在多个训练小批量上平均梯度,请参阅这个线程了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)