繁体   English   中英

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

[英]How to use Deep Learning Models from Keras for a problem that does not fit imagenet dataset?

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

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

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

VGG16 从头开始实现相当容易,但对于 resnet 或 xception 等模型来说,它变得有点棘手。

没有必要从头开始实现 model 来冻结几层。 您也可以在预训练模型上执行此操作。 在 keras 中,您将使用 trainable trainable = False

例如,假设您想使用来自 keras 的预训练 Xception model 并想冻结前 x 层:

#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()

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM