Keras保存模型并载入模型继续训练的实现


Posted in Python onFebruary 20, 2021

我们以MNIST手写数字识别为例

import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
 
# 载入数据
(x_train,y_train),(x_test,y_test) = mnist.load_data()
# (60000,28,28)
print('x_shape:',x_train.shape)
# (60000)
print('y_shape:',y_train.shape)
# (60000,28,28)->(60000,784)
x_train = x_train.reshape(x_train.shape[0],-1)/255.0
x_test = x_test.reshape(x_test.shape[0],-1)/255.0
# 换one hot格式
y_train = np_utils.to_categorical(y_train,num_classes=10)
y_test = np_utils.to_categorical(y_test,num_classes=10)
 
# 创建模型,输入784个神经元,输出10个神经元
model = Sequential([
    Dense(units=10,input_dim=784,bias_initializer='one',activation='softmax')
  ])
 
# 定义优化器
sgd = SGD(lr=0.2)
 
# 定义优化器,loss function,训练过程中计算准确率
model.compile(
  optimizer = sgd,
  loss = 'mse',
  metrics=['accuracy'],
)
 
# 训练模型
model.fit(x_train,y_train,batch_size=64,epochs=5)
 
# 评估模型
loss,accuracy = model.evaluate(x_test,y_test)
 
print('\ntest loss',loss)
print('accuracy',accuracy)
 
# 保存模型
model.save('model.h5')  # HDF5文件,pip install h5py

Keras保存模型并载入模型继续训练的实现

Keras保存模型并载入模型继续训练的实现

载入初次训练的模型,再训练

import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
from keras.models import load_model
# 载入数据
(x_train,y_train),(x_test,y_test) = mnist.load_data()
# (60000,28,28)
print('x_shape:',x_train.shape)
# (60000)
print('y_shape:',y_train.shape)
# (60000,28,28)->(60000,784)
x_train = x_train.reshape(x_train.shape[0],-1)/255.0
x_test = x_test.reshape(x_test.shape[0],-1)/255.0
# 换one hot格式
y_train = np_utils.to_categorical(y_train,num_classes=10)
y_test = np_utils.to_categorical(y_test,num_classes=10)
 
# 载入模型
model = load_model('model.h5')
 
# 评估模型
loss,accuracy = model.evaluate(x_test,y_test)
 
print('\ntest loss',loss)
print('accuracy',accuracy)
 
# 训练模型
model.fit(x_train,y_train,batch_size=64,epochs=2)
 
# 评估模型
loss,accuracy = model.evaluate(x_test,y_test)
 
print('\ntest loss',loss)
print('accuracy',accuracy)
 
# 保存参数,载入参数
model.save_weights('my_model_weights.h5')
model.load_weights('my_model_weights.h5')
# 保存网络结构,载入网络结构
from keras.models import model_from_json
json_string = model.to_json()
model = model_from_json(json_string)
 
print(json_string)

关于compile和load_model()的使用顺序

这一段落主要是为了解决我们fit、evaluate、predict之前还是之后使用compile。想要弄明白,首先我们要清楚compile在程序中是做什么的?都做了什么?

compile做什么?

compile定义了loss function损失函数、optimizer优化器和metrics度量。它与权重无关,也就是说compile并不会影响权重,不会影响之前训练的问题。

如果我们要训练模型或者评估模型evaluate,则需要compile,因为训练要使用损失函数和优化器,评估要使用度量方法;如果我们要预测,则没有必要compile模型。

是否需要多次编译?

除非我们要更改其中之一:损失函数、优化器 / 学习率、度量

又或者我们加载了尚未编译的模型。或者您的加载/保存方法没有考虑以前的编译。

再次compile的后果?

如果再次编译模型,将会丢失优化器状态.

这意味着您的训练在开始时会受到一点影响,直到调整学习率,动量等为止。但是绝对不会对重量造成损害(除非您的初始学习率如此之大,以至于第一次训练步骤疯狂地更改微调的权重)。

到此这篇关于Keras保存模型并载入模型继续训练的实现的文章就介绍到这了,更多相关Keras保存模型并加载模型内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
编写Python CGI脚本的教程
Jun 29 Python
python中私有函数调用方法解密
Apr 29 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
python更改已存在excel文件的方法
May 03 Python
pandas.loc 选取指定列进行操作的实例
May 18 Python
python读取Excel实例详解
Aug 17 Python
详解python深浅拷贝区别
Jun 24 Python
python实现按行分割文件
Jul 22 Python
python 函数中的参数类型
Feb 11 Python
浅谈Pycharm最有必要改的几个默认设置项
Feb 14 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
python求numpy中array按列非零元素的平均值案例
Jun 08 Python
TensorFlow2.0使用keras训练模型的实现
Feb 20 #Python
tensorflow2.0教程之Keras快速入门
Feb 20 #Python
在Pycharm中安装Pandas库方法(简单易懂)
Feb 20 #Python
Python3爬虫RedisDump的安装步骤
Feb 20 #Python
python爬取2021猫眼票房字体加密实例
Feb 19 #Python
Python之Sklearn使用入门教程
Feb 19 #Python
Python爬虫UA伪装爬取的实例讲解
Feb 19 #Python
You might like
php curl_init函数用法
2014/01/31 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
php常用文件操作函数汇总
2014/11/22 PHP
微信支付开发维权通知实例
2016/07/12 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
node.js利用socket.io实现多人在线匹配联机五子棋
2018/05/31 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
uniapp与webview之间的相互传值的实现
2020/06/29 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
python对文件目录的操作方法实例总结
2019/06/24 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
pytorch 求网络模型参数实例
2019/12/30 Python
django执行原始查询sql,并返回Dict字典例子
2020/04/01 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
CSS3中伪元素::before和::after的用法示例
2017/09/18 HTML / CSS
尤为Wconcept中国官网:韩国设计师品牌服饰
2019/01/10 全球购物
美国便宜的横幅和标志印刷在线:Best of Signs
2019/05/29 全球购物
国际商务系学生个人的自我评价
2013/11/26 职场文书
2014两会学习心得:榜样精神伴我行
2014/03/17 职场文书
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
大学毕业典礼致辞
2015/07/29 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python