Caffe 微调与从头开始

Caffe fine-tuning vs. starting from scratch

上下文:假设我在 datasetA 上训练了一个 CNN,并且我获得了 caffeModelA.

现状:新图片到了,我可以建立一个新的数据集,datasetB

问题:这两种情况会导致相同的 caffemodel 吗?

  1. 合并 datasetAdatasetB 并从头开始训练网络。
  2. 对现有 caffeModelA 执行一些 微调 ,仅在 datasetB 上训练它(如此处解释:http://caffe.berkeleyvision.org/gathered/examples/finetune_flickr_style.html

这似乎是一个愚蠢的问题,但我不太确定它的答案。这真的很重要,因为如果两个近似值导致相同的结果,我可以通过执行数字 2 来节省时间。

注意:请记住这是同一个问题,所以这里不需要更改架构,我只是打算将新图像添加到训练中。

在 Flicker-style 示例中,情况更为普遍。他们使用为不同分类任务训练的模型中第一层的权重,并将其用于新任务,只训练新的最后一层并稍微微调第一层(通过为这些预训练层设置低学习率) ).您的情况类似但更具体,您希望使用预训练模型为完全相同的任务训练确切的架构,但要扩展您的数据。

如果您的问题是选项 1 是否会产生与选项 2 完全 相同的模型(所有结果权重相等)。那么不会,很可能不会。

在选项 2 中,网络被训练为 dataset A 的迭代,然后是 dataset B,然后是 dataset A......等等(假设两者只是连接在一起)。 在选项 1 中,将让网络在 dataset A 上接受一些 iterations/epochs 的训练,然后仅在 dataset B 上继续学习 iterations/epochs,仅此而已。因此,求解器将在两个选项中看到不同的梯度序列,从而产生两个不同的模型。这是从严格的理论角度来看的。

如果你从实用的角度来问,这两个选项最终可能会得到非常相似的模型。你在 dataset A 上训练了多少 epochs(不是迭代)?说 N epochs,那么你可以安全地使用选项 2。并在 dataset B 上进一步训练现有模型以获得相同数量的 epochs 和相同的学习率和批量大小。