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共享引用(多个变量引用)示例代码
Dec 04 Python
Python装饰器模式定义与用法分析
Aug 06 Python
详解PyCharm配置Anaconda的艰难心路历程
Aug 13 Python
pandas数据筛选和csv操作的实现方法
Jul 02 Python
详解Django将秒转换为xx天xx时xx分
Sep 27 Python
python实现LRU热点缓存及原理
Oct 29 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
创建Shapefile文件并写入数据的例子
Nov 26 Python
解决Keras 自定义层时遇到版本的问题
Jun 16 Python
Python面向对象之成员相关知识总结
Jun 24 Python
Python制作一个随机抽奖小工具的实现
Jul 07 Python
Python first-order-model实现让照片动起来
Jun 25 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 array_slice函数的使用以及参数详解
2008/08/30 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
php实例分享之二维数组排序
2014/05/15 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
jquery一般方法介绍 入门参考
2011/06/21 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
Javascript实现鼠标框选操作  不是点击选取
2016/04/14 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
jQuery输入框密码的显示隐藏【代码分享】
2017/04/29 jQuery
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
python生成验证码图片代码分享
2016/01/28 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
使用Html5中的cavas画一面国旗
2019/09/25 HTML / CSS
财务会计专业应届毕业生求职信
2013/10/18 职场文书
归元寺导游词
2015/02/06 职场文书
大学生入党自荐书
2015/03/05 职场文书
离婚起诉状范本
2015/05/19 职场文书
狂人日记读书笔记
2015/06/30 职场文书
MySQL读取JSON转换的方式
2022/03/18 MySQL
Python绘制散乱的点构成的图的方法
2022/04/21 Python