Caffe | solver.prototxt值设置策略

在Caffe上,我正在尝试实现一个用于语义分割的全卷积网络。我想知道在设置以下超参数的'solver.prototxt'值时是否有特定的策略:

  • test_iter
  • test_interval
  • iter_size
  • max_iter

这是否取决于你用于训练集的图像数量?如果是,如何依赖?


回答:

为了有意义地设置这些值,你需要了解一些关于数据的额外信息:

1. 训练集大小 你拥有的训练样本总数,我们称这个数量为T
2. 训练批次大小 一次批次中一起处理的训练样本数量,通常由'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:这允许在多个训练小批次上平均梯度,详见这个讨论

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注