在Caffe上,我正在尝试实现一个用于语义分割的完全卷积网络。我想知道是否有针对以下超参数设置'solver.prototxt'
值的具体策略:
是否取决于训练集的图像数量?如果是这样,怎么样?
答案 0 :(得分:29)
为了以有意义的方式设置这些值,您需要有关于数据的更多信息:
<强> 1。培训设置大小您拥有的培训示例总数,请拨打此数量T
。
的 2。培训批量大小在一个批处理中一起处理的培训示例的数量,这通常由'train_val.prototxt'
中的输入数据层设置。例如,在this file中,列车批量大小设置为256.我们用tb
表示此数量。
第3。验证设置大小您为验证模型而预留的示例总数,让我们通过V
表示这一点。
的 4。验证批量大小值在batch_size
中为TEST阶段设置。在this example中,它设置为50.我们称之为vb
。
现在,在培训期间,您希望每隔一段时间对网络的性能进行无偏见的估计。为此,您需要在test_iter
次迭代的验证集上运行您的网络。要覆盖整个验证集,您需要test_iter = V/vb
你多久想得到这个估计?它真的取决于你。如果您拥有非常大的验证集和缓慢的网络,过于频繁的验证会使培训过程过长。另一方面,不经常验证可能会阻止您注意您的培训过程是否以及何时未能收敛。 test_interval
确定您验证的频率:通常对于大型网络,您将test_interval
设置为5K,对于较小和较快的网络,您可以选择较低的值。一切都取决于你。
为了覆盖整个训练集(完成&#34; epoch&#34;),您需要运行T/tb
次迭代。通常一个人训练几个时期,因此max_iter=#epochs*T/tb
。
关于iter_size
:这允许对几个训练小批量的平均值进行平均,有关详细信息,请参阅this thread。