在 Caffe 上,我正在尝试实现一个完全卷积网络来进行语义分割。我想知道是否有特定的策略来设置'solver.prototxt'
以下超参数的值:
- test_iter
- 测试间隔
- iter_size
- 最大迭代器
这是否取决于您为训练集拥有的图像数量?如果是这样,怎么做?
在 Caffe 上,我正在尝试实现一个完全卷积网络来进行语义分割。我想知道是否有特定的策略来设置'solver.prototxt'
以下超参数的值:
这是否取决于您为训练集拥有的图像数量?如果是这样,怎么做?
为了以有意义的方式设置这些值,您需要获得更多有关数据的信息:
1. Training set size你拥有的训练样本总数,我们称之为数量T
。
2. Training batch size单个batch中一起处理的训练样例的数量,这通常由输入数据层在'train_val.prototxt'
. 例如,在这个文件中,训练批次大小设置为 256。让我们用 来表示这个数量tb
。
3. 验证集大小您为验证模型预留的示例总数,我们用 表示V
。4.为 TEST 阶段设置的
验证批量大小值。batch_size
在此示例中,它设置为 50。我们称之为vb
。
现在,在训练期间,您希望每隔一段时间对网络的性能进行无偏估计。为此,您在验证集上运行您的网络以进行test_iter
迭代。要覆盖整个验证集,您需要拥有test_iter = V/vb
.
您希望多久获得一次此估算值?这真的取决于你。如果您有一个非常大的验证集和一个缓慢的网络,那么过于频繁地验证会使训练过程变得太长。另一方面,验证不够频繁可能会使您无法注意到您的训练过程是否以及何时未能收敛。test_interval
确定您验证的频率:通常对于您设置test_interval
的 5K 量级的大型网络,对于更小更快的网络,您可以选择较低的值。再一次,一切都取决于你。
为了覆盖整个训练集(完成一个“epoch”),您需要运行T/tb
迭代。通常一个训练几个 epoch,因此max_iter=#epochs*T/tb
.
关于iter_size
:这允许在几个训练小批量上平均梯度,请参阅此线程以获取更多信息。