Python Keras:如何保存模型或重量?
如果这个问题看起来很直截了当,我很抱歉。但是阅读Keras保存和恢复帮助页面: 我不明白如何在培训期间使用“ModelCheckpoint”进行保存。帮助文件提到它应该提供3个文件,我只看到一个,MODEL.ckpt 这是我的密码:Python Keras:如何保存模型或重量?,python,tensorflow,keras,save,Python,Tensorflow,Keras,Save,如果这个问题看起来很直截了当,我很抱歉。但是阅读Keras保存和恢复帮助页面: 我不明白如何在培训期间使用“ModelCheckpoint”进行保存。帮助文件提到它应该提供3个文件,我只看到一个,MODEL.ckpt 这是我的密码: checkpoint_dir = FolderName + "/tmp/model.ckpt" cp_callback = k.callbacks.ModelCheckpoint(checkpoint_dir,verbose=1,save_weights_only
checkpoint_dir = FolderName + "/tmp/model.ckpt"
cp_callback = k.callbacks.ModelCheckpoint(checkpoint_dir,verbose=1,save_weights_only=True)
parallel_model.compile(optimizer=tf.keras.optimizers.Adam(lr=learning_rate),loss=my_cost_MSE, metrics=['accuracy])
parallel _model.fit(image, annotation, epochs=epoch,
batch_size=batch_size, steps_per_epoch=10,
validation_data=(image_val,annotation_val),validation_steps=num_batch_val,callbacks=callbacks_list)
此外,当我想在训练后用以下方法负重时:
model = k.models.load_model(file_checkpoint)
我得到一个错误:
"raise ValueError('Unknown ' + printable_module_name + ':' + object_name)
ValueError: Unknown loss function:my_cost_MSE"
my-cost_MSE是我在培训中使用的成本函数。
keras
有一个保存
命令。它保存重建模型所需的所有详细信息
(摘自)
首先,看起来您使用的是
tf.keras
(来自tensorflow)实现,而不是keras
(来自keras团队/keras回购)。在这种情况下,如以下文件所述:
保存模型权重时,tf.keras默认为检查点
格式。通过save_format='h5'使用HDF5
另一方面,请注意,添加回调ModelCheckpoint
通常大致相当于在每个历元结束时调用model.save(…)
,因此,您应该希望保存三个文件(根据
它不这样做的原因是,通过使用选项save\u weights\u only=True
,您只保存了权重。大致相当于在每个历元结束时为model.save
替换对model.save\u weights
的调用。因此,保存的唯一文件是具有权重的文件
从这里开始,您可以通过两种不同的方式进行操作:
只存储重量
您需要事先加载模型(比如结构),然后调用model.load\u weights
,而不是keras.models.load\u model
:
model=MyModel(…)#培训中使用的模型定义
模型加载权重(文件检查点)
请注意,在这种情况下,自定义定义(my_cost_MSE
)不会有问题,因为您只是加载模型权重
存储整个模型
另一种方法是存储整个模型并相应加载:
cp\u callback=k.callbacks.ModelCheckpoint(
检查点_dir,verbose=1,
仅保存权重=False
)
并行_model.compile(
优化器=tf.keras.optimizers.Adam(lr=学习率),
损失=我的成本,
指标=['准确度']
)
model.fit(…,回调=[cp\u回调])
然后您可以通过以下方式加载它:
model=k.models.load\u模型(文件检查点,自定义对象={“我的成本”:我的成本})
请注意,在后一种情况下,您需要指定
自定义\u对象
,因为反序列化模型需要它的定义。如何在培训期间应用它?我在其他页面上看到了这一点,询问有关保存的问题,但在model.fit中,它将不起作用。
from keras.models import load_model
model.save('my_model.h5') # creates a HDF5 file 'my_model.h5'
del model # deletes the existing model
# returns am identical compiled model
model = load_model('my_model.h5')