在Caffe中,我正在尝试为语义分割实现全卷积网络。我想知道是否有特定的策略来设置'solver.prototxt'值以针对以下超参数进行优化:
- test_iter
- test_interval
- iter_size
- max_iter
1. 训练集大小:您拥有的训练示例总数,我们将其称为T
。
2. 训练批量大小:在单个批次中一起处理的训练示例数量,通常由'train_val.prototxt'
中的输入数据层设置。例如,在this file中,训练批量大小设置为256。我们用tb
表示这个数量。
3. 验证集大小:您留出用于验证模型的示例总数,我们用V
表示。
4. 验证批量大小:在测试阶段设置的batch_size
值。在this example中,它设置为50。我们称之为vb
。
test_iter
次迭代。为了覆盖整个验证集,您需要有test_iter = V/vb
。test_interval
确定您验证的频率:通常对于大型网络,您将test_interval
设置为5K,对于更小、更快的网络,您可以选择更低的值。同样,完全由您决定。
为了覆盖整个训练集(完成一个“epoch”),您需要运行T/tb
次迭代。通常,人们会训练多个epochs,因此max_iter=#epochs*T/tb
。
iter_size
:这允许在几个训练小批量上平均梯度,请参见this thread了解更多信息。"Adam"
)。所有这些都可能需要大量的RAM。参见此线程。 - Shai
weight_decay
。请参阅此线程以了解如何设置它。 - Shai