首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GoogLeNet模型的微调

GoogLeNet模型的微调
EN

Stack Overflow用户
提问于 2016-04-25 20:52:05
回答 2查看 10.7K关注 0票数 15

我从头开始训练GoogLeNet模型。但它没有给我带来令人振奋的结果。

作为另一种选择,我想在我的数据集上对GoogLeNet模型进行微调。有人知道我应该遵循什么步骤吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-25 21:50:35

假设您正在尝试进行图像分类。这些应该是优化模型的步骤:

1.分类层

原始的classification layer "loss3/classifier"输出1000个类别的预测(它的mum_output设置为1000)。您需要将其替换为具有适当num_output的新层。替换分类层:

  1. 更改层的名称(这样当您从咖啡模型文件中读取原始权重时,将不会与该层的权重冲突)。
  2. num_output更改为您尝试预测的正确数量的输出类。
  3. 请注意,您需要更改所有分类层。通常只有一个,但GoogLeNet恰好有三个:"loss1/classifier""loss2/classifier""loss3/classifier".

2.数据

您需要使用要微调到的新标签创建一个新的训练数据集。例如,有关如何创建lmdb数据集的信息,请参阅this post

3.你想要多大范围的微调?

在对模型进行微调时,您可以训练所有模型的权重,也可以选择固定一些权重(通常是较低/较深层的过滤器),而只训练最顶层的权重。这个选择取决于你,它通常取决于可用的训练数据量(你拥有的例子越多,你就能负担得起更多的权重)。

每一层(保存可训练参数)都有param { lr_mult: XX }。此系数确定这些权重对SGD更新的影响程度。设置param { lr_mult: 0 }意味着你固定了这一层的权重,它们在训练过程中不会改变。

相应地编辑您的train_val.prototxt

4.运行caffe

运行caffe train,但为其提供caffemodel权重作为初始权重:

代码语言:javascript
复制
~$ $CAFFE_ROOT/build/tools/caffe train -solver /path/to/solver.ptototxt -weights /path/to/orig_googlenet_weights.caffemodel 
票数 29
EN

Stack Overflow用户

发布于 2016-09-03 16:44:45

与过去的手动功能相比,微调是一个非常有用的技巧,可以实现有希望的准确性。@Shai已经发布了一个使用Caffe微调Googlenet的很好的教程,所以我只想给出一些针对一般情况进行微调的建议和技巧。

在大多数情况下,我们面临着新数据集(例如Oxford 102 flower datasetCat&Dog)具有以下四种常见情况的任务分类问题CS231n

  1. 新数据集较小且与原始数据集相似。
  2. 新数据集较小但与原始数据集不同(大多数常见情况)
  3. 新数据集较大且与原始数据集相似。
  4. 新数据集较大但与原始数据集不同。

在实践中,大多数时间我们没有足够的数据从头开始训练网络,但对于预先训练的模型来说可能足够了。不管我在上面提到了什么情况,我们唯一关心的是我们有足够的数据来训练CNN吗?

如果是,我们可以从头开始训练CNN。然而,在实践中,从预训练模型中初始化权重仍然是有益的。

如果不是,我们需要检查数据是否与原始数据集有很大不同?如果非常相似,我们可以对完全连接的神经网络或fine-tune with SVM进行微调。然而,如果它与原始数据集有很大的不同,我们可能需要fine-tune the convolutional neural network to improve the generalization

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36841158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档