首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Keras中的深度学习模型来解决不适合imagenet数据集的问题?

如何使用Keras中的深度学习模型来解决不适合imagenet数据集的问题?
EN

Stack Overflow用户
提问于 2020-07-15 13:40:26
回答 1查看 281关注 0票数 0

我关注了一篇关于如何从头开始实现vgg16-model的博客,我想用Keras的预训练模型来做同样的事情。我查了一些其他的博客,但我想找不到合适的解决方案。我的任务是将集成电路图像分为缺陷和非缺陷。

我在一篇论文中看到,他们使用vgg16的预训练imagenet模型进行织物缺陷检测,他们冻结了前七层,并针对自己的问题对后九层进行了微调。(来源:https://journals.sagepub.com/doi/full/10.1177/1558925019897396)

我已经看到了如何冻结除完全连接的层之外的所有层的示例,但我如何尝试冻结前x层的示例,并针对我的问题对其他层进行微调?

VGG16相当容易从头开始实现,但是对于像resnet或xception这样的模型,它变得有点棘手。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-15 15:53:27

没有必要从头开始实现一个模型来冻结几个层。你也可以在预先训练好的模型上做到这一点。在keras中,您将使用trainable = False

例如,假设您希望使用keras中预先训练好的Xception模型,并希望冻结前x层:

代码语言:javascript
复制
#In your includes
from keras.applications import Xception

#Since you're using the model for a different task, you'd want to remove the top
base_model = Xception(weights='imagenet', include_top=False)

#Freeze layers 0 to x
for layer in base_model.layers[0:x]:
    layer.trainable = False

#To see all the layers in detail and to check trainable parameters
base_model.summary()

理想情况下,您可能希望在此模型之上添加另一个层,并将输出作为您的类。有关更多详细信息,请查看此keras指南:https://keras.io/guides/transfer_learning/

很多时候,预先训练的权重在其他分类任务中可能非常有用,但如果您希望在数据集上从头开始训练模型,则可以在不使用imagenet权重的情况下加载模型。或者更好,加载权重,但不要冻结任何层。这将重新训练每一层,将imagenet权重作为初始化。

我希望我已经回答了你的问题。

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

https://stackoverflow.com/questions/62908265

复制
相关文章

相似问题

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