Caffe | solver.prototxt值设置策略

14
在Caffe中,我正在尝试为语义分割实现全卷积网络。我想知道是否有特定的策略来设置'solver.prototxt'值以针对以下超参数进行优化:
  • test_iter
  • test_interval
  • iter_size
  • max_iter
这是否取决于您训练集中的图像数量?如果是这样,那么如何确定?

另一个元参数是 weight_decay。请参阅此线程以了解如何设置它。 - Shai
1个回答

30
为了有意义地设置这些值,您需要获取有关数据的更多信息:

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了解更多信息。

{btsdaf} - Chetan Arvind Patil
@ChetanArvindPatil 看起来你把模型参数的存储需求和训练/验证计算时的RAM使用混淆了。Caffe将所有参数及其导数存储在内存中,此外还存储数据(训练/验证批次)和导数(用于反向传播)。一些求解器甚至需要额外的存储空间来调整每个参数的学习率(例如"Adam")。所有这些都可能需要大量的RAM。参见此线程 - Shai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接