2017-10-11 209 views
0

我在互联网上看到过很多关于如何微调VGG16和InceptionV3的例子。例如,有些人在微调VGG16时会将前25层设置为冻结。对于InceptionV3,前172层将被冻结。但是,如何resnet?当我们做微调的时候,我们会冻结一些底层模型,如下:如何用resnet50模型进行微调?

from keras.applications.resnet50 import ResNet50 

base_model = ResNet50(include_top=False, weights="imagenet", input_shape=(input_dim, input_dim, channels)) 

.............. 

for layer in base_model.layers[:frozen_layers]: 
    layer.trainable = False 

那么应该如何设置frozen_layers?实际上我不知道应该用VGG16,VGG19,ResNet50,InceptionV3等进行微调时,我应该设置多少层。任何人都可以给我关于如何微调这些模型的建议吗?特别是当用这些模型进行微调时,有多少人会冻结?

+0

我也听说如果我们只训练我们自己的密集层,这就是所谓的转移学习。如果我们用小的学习速度在base_model中训练一些图层(如resnet,vgg .etc),则称为微调。我知道卷积块有一些特殊的含义,那么如何冻结基本模型中的图层以便进行微调? –

+0

我在这个博客上看到这些:[building-powerful-image-classification-models-using-very-little-data](https://blog.keras.io/building-powerful-image-classification-models-using- very-little-data.html) –

回答

0

这就是好奇....的VGG16模型共有23层......(https://github.com/fchollet/keras/blob/master/keras/applications/vgg16.py


所有这些模型也有类似的strucutre:

  • 一系列卷积的其次几个致密层的层

这几个致密层一请问什么是keras电话top。 (如在include_top参数中)。

通常,这种微调只发生在最后的密集层。你让卷积层(理解图像和定位特征)不改变他们的工作,并创建适合你个人课程的顶部。

人们经常创造自己的顶级部分,因为他们没有完全相同的原始模型训练到的类。所以他们适应最后的部分,只训练最后的部分。

所以,你创建一个模型include_top=False,然后你完全冻结它。
现在你添加自己的密集层,并留下这些可训练的。

这是这些模型最常见的改编。

对于其他类型的微调,可能没有明确的规则。

+0

对不起vgg的错误。我的意思是人们会冻结vgg网络,除了最后一个卷积块以便更适应他们自己的数据,然后调整最后的卷积块以及具有小学习率的密集层,如下所示:[vgg16 fine -tuning](https://blog.keras.io/img/imgclf/vgg16_modified.png) –