Python Keras:如何保存模型或重量?

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

如果这个问题看起来很直截了当,我很抱歉。但是阅读Keras保存和恢复帮助页面:

我不明白如何在培训期间使用“ModelCheckpoint”进行保存。帮助文件提到它应该提供3个文件,我只看到一个,MODEL.ckpt

这是我的密码:

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')