我已经使用了来自于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/