在Keras中,经常需要多模型的结构和权重进行保存和加载,本文对Keras的模型的保存于加载进行了浅层次的学习。(checkpoint回调函数的话,是在训练过程中,不同epoch之间进行模型的return操作,本文讲的是讲训练过程中return的模型进行保存到本地的过程,本人理解…)
Keras中模型保存
model.save(filepath)
- 模型结构 - > 重构模型
- 模型权重
- 训练配置(损失函数,优化器等等)
- 优化器状态 - > 方便从上次训练中断的地方重新开始训练。
keras.models.load_model(filepath)
重新实例化模型,如果文件中存储了训练设置的话,也会完成模型的编译。1
2
3
4from keras.models import load_model
model.save('my_model.h5')
del model # 删除模型
model = load_model('my_model.h5') # 重新加载模型
model.to_json(),model.to+yaml()
这两个函数可以模型序列化为json或yaml文件。
1 | # 存储为JSON |
model_from_json,model_from_yaml
从JSON文件或者YAML文件加载模型
1 | from keras.models import model_from_json |
model.save_weight()
该函数可以保存模型的权重。
1 | model.save_weight('my_model_weight.h5') |
model.load_weight()
该函数可以将初始化一个完全相同的模型
1 | model.load_weight('my_model_weight.h5') |
如果需要加载权重到不同的网络结构(有些层一样)中,例如fine-tune或者transfer-learing,可以通过层名字加载模型。下面例子,就通过层的名字加载了一个网络权重,新的模型中,第一次dense_1重新加载了,第二层名为new_dense,没有重新加载
1 | """ |
参考资料
https://keras-cn.readthedocs.io/en/latest/for_beginners/FAQ/#save_model