13.模型保存-加载

模型保存-加载整个模型

Keras 模型保存为HDF5文件。
(官网建议)不建议使用pickle 或cPickle 来保存Keras 模型。

保存:使用model.save(filepath) 将Keras 模型保存到单个HDF5中。
可以保存以下内容:

  1. 模型的结构,允许重新创建模型
  2. 模型的权重
  3. 训练配置项(损失函数,优化器)
  4. 优化器状态,允许准确地从上次结束的地方继续训练。

代码:
保存

import h5py
model.save('my_model.h5')

加载:

import keras
from keras.models import load_model
import numpy as np
my_model=load_model('my_model.h5') 
import keras.datasets.mnist as mnist   
(train_image,train_lable),(test_image,test_label)=mnist.load_data() #加载数据集

预测举例

test_image = np.expand_dims(test_image,axis=-1)
my_model.evaluate(test_image,test_label)
my_model.predict(test_image[0:2])

模型保存-加载模型结构

保存

from keras.models import model_from_json
my_model_json=model.to_json()
with open('muy_json_model.json','w') as f:
    f.write(my_model_json)

加载:

with open('muy_json_model.json') as f:
    my_json_model = f.read()
from keras.models import model_from_json
model=model_from_json(my_json_model)

看看是不是和以前结构一样:

model.summary()

这里是完成不了my_model.evaluate(test_image,test_label)的,因为没有编译也没有权重,只是一个结构。

模型保存-加载模型训练权重

model.save_weights('my_model_weights.h5') #保存模型权重
model.load_weights('my_model_weights.h5') #加载模型权重

上面是保存所有层的权重
还可以实现保存部分层的权重
但首先要给层取一个名字

model.add(layers.Dense(64,activation='relu',name='D1')) 

给这个层起个名字 叫D1
这时候保存权重的时候会根据名字保存。
然后

model.load_weights('my_model_weights.h5',by_name=True) #加载模型权重

就会按照层的名称加载模型权重了。(保存的时候模型的层的名字要和加载时建立的模型的层的名字一致)

在训练期间保存检查点

在训练期间或者训练结束时自动保存检查点,这样就可以使用经过训练的模型,而无需重新训练模型,或者从上次暂停的地方继续训练,以防训练过程中断。
回调函数:tf.keras.callbacks.ModelCheckpoint 或者keras.callbacks.ModelCheckpoint

keras.callbacks.ModelCheckpoint(
    filepath,        保存路径
    monitor='val_loss',  监控目标
    verbose=0,  是否显示提示
    save_best_only=False, 保存loss最低的权值
    save_weights_only=False, 只保存权重 (false 就是保存整个模型)
    mode='auto',         
    save_freq='epoch',
    **kwargs,
)

怎么保存?

cp_callback=keras.callbacks.ModelCheckpoint(checkpoin_path,save_weights_only=True) #定义保存路径,保存啥什么的
model.fit(train_image,train_label,epochs=3, callbacks=[cp_callback]) #在训练模型的时候使用,就会保存

怎么使用?比如训练中途突然断电或者其他什么原因。
如何恢复这个模型:
首先创建原来的模型,然后编译,然后加载保存了的权重:

model.load_weights(checkpoin_path)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值