我已经使用了来自于Keras的ResNet50的迁移学习来训练构造网络,如下所示。

base_model = applications.ResNet50(weights='imagenet', include_top=False, input_shape=(333, 333, 3))

## set model architechture
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
x = Dense(256, activation='relu')(x)
predictions = Dense(y_train.shape[1], activation='softmax')(x)
model = Model(input=base_model.input, output=predictions)

model.compile(loss='categorical_crossentropy', optimizer=optimizers.SGD(lr=1e-4, momentum=0.9),
              metrics=['accuracy'])

model.summary()


在按如下所示训练模型后,我要保存模型。

history = model.fit_generator(
    train_datagen.flow(x_train, y_train, batch_size=batch_size),
    steps_per_epoch=600,
    epochs=epochs,
    callbacks=callbacks_list
)


我不能使用keras模型中的save_model()函数,因为此处的模型类型为Model。我使用了save()函数来保存模型。但是后来,当我加载模型并验证模型时,它的行为就像是未经训练的模型。我认为重量没有节省。哪里错了。?如何正确保存此模型。

最佳答案

根据Keras official docs
如果只需要保存模型的架构,则可以使用

model_json = model.to_json()
with open("model_arch.json", "w") as json_file:
    json_file.write(model_json)


节省体重

model.save_weights("my_model_weights.h5")


您可以稍后加载json文件并使用

from keras.models import model_from_json
model = model_from_json(json_string)


同样,您可以使用砝码

model.load_weights('my_model_weights.h5')


我正在使用相同的方法,并且效果很好。

关于machine-learning - 在Keras中保存转移学习模型的正确方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46345098/

10-11 07:22