首页 文章

如何在现有的CNN模型中使用预先训练过的权重进行Keras的转学?

提问于
浏览
0

我正在通过Keras中的卷积神经网络(CNN)研究基于2D RGB像素的图像分类问题 . 我的完整CNN模型可以找到here .

我做以下培训/适合CNN模型:

model =  my_CNN_unet()

model_checkpoint = ModelCheckpoint('testweights_{epoch:02d}.hdf5')
model.fit(x_trn, y_trn, batch_size=50, epochs=3, verbose=1, shuffle=True,
callbacks=[model_checkpoint], validation_data=(x_val, y_val))

如何更改我的代码,以便我使用知名CNN架构(如 VGGInception )的预训练权重(即转移学习)

1 回答

  • 1

    正如人们在评论中提到的那样, keras.applications 提供了一种访问预训练模型的方法 . 举个例子:

    import keras
    from keras.models import Model
    
    model_base = keras.applications.vgg16.VGG16(include_top=False, input_shape=(*IMG_SIZE, 3), weights='imagenet')
    output = model_base.output
    # Add any other layers you want to `output` here...
    output = Dense(len(categories), activation='softmax')(output)
    model = Model(model_base.input, output)
    for layer in model_base.layers:
       layer.trainable = False
    model.compile(optimizer='adam',
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])
    return model
    

    您可以像训练以前的CNN一样训练此模型 . Keras应用程序提供对许多模型的访问,例如Inception,VGG16,VGG19,ResNet等 - 您可以以类似的方式访问它们 . 我写了一篇博客文章,介绍如何在Keras中使用转移学习来构建图像分类器:http://innolitics.com/10x/pretrained-models-with-keras/ . 它有一个可以查看的工作代码示例 .

相关问题