在Keras中微调已经微调的模型

时间:2018-12-17 21:30:06

标签: machine-learning keras

我通过使用vgg19模型和Keras 2.2.4进行转移学习对模型进行了微调。 我有10节课。现在我有14个类,我想根据上一次的微调将它们添加到新的微调模型中。

##########################
# finetune pretrained model
##########################

model_base = keras.applications.vgg19.VGG19(include_top=False, input_shape=(*IMG_SIZE, 3), weights='imagenet')

output = Flatten()(model_base.output)
output = BatchNormalization()(output)
output = Dropout(0.5)(output)
output = Dense(64, activation='relu')(output)
output = BatchNormalization()(output)
output = Dropout(0.5)(output)
output = Dense(10, activation='softmax')(output)    

model = Model(model_base.input, output)

# freeze all layer (except ours)
for layer in model_base.layers:
    layer.trainable = False

model.compile(optimizer='adam',
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])


model.save(model_path)
model.save_weights(model_weights_path)

##########################
# finetune with new classes
##########################

model_base = load_model(model_path)
model_base.load_weights(model_weights_path) 

output = Flatten()(model_base.output)
output = BatchNormalization()(output)
output = Dropout(0.5)(output)
output = Dense(64, activation='relu')(output)
output = BatchNormalization()(output)
output = Dropout(0.5)(output)
output = Dense(14, activation='softmax')(output)    

model = Model(model_base.input, output)

# freeze all layer (except ours)
for layer in model_base.layers:
    layer.trainable = False

model.compile(optimizer='adam',
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])

model.save(model_path)
model.save_weights(model_weights_path)

出现错误:

ValueError: Input 0 is incompatible with layer flatten_1: expected min_ndim=3, found ndim=2

我认为我必须删除第一次微调时添加的7层,但无法弄清楚。

当我们要添加新类或从头开始重新训练(在这种情况下使用vgg19作为预训练模型)时,这也是一种微调的好方法吗?

0 个答案:

没有答案