python模型保存save_浅谈keras保存模型中的save()和save_weights()区别

今天做了一个关于keras保存模型的实验,希望有助于大家了解keras保存模型的区别。

我们知道keras的模型一般保存为后缀名为h5的文件,比如final_model.h5。同样是h5文件用save()和save_weight()保存效果是不一样的。

我们用宇宙最通用的数据集MNIST来做这个实验,首先设计一个两层全连接网络:

inputs = Input(shape=(784, ))

x = Dense(64, activation='relu')(inputs)

x = Dense(64, activation='relu')(x)

y = Dense(10, activation='softmax')(x)

model = Model(inputs=inputs, outputs=y)

然后,导入MNIST数据训练,分别用两种方式保存模型,在这里我还把未训练的模型也保存下来,如下:

from keras.models import Model

from keras.layers import Input, Dense

from keras.datasets import mnist

from keras.utils import np_utils

(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train=x_train.reshape(x_train.shape[0],-1)/255.0

x_test=x_test.reshape(x_test.shape[0],-1)/255.0

y_train=np_utils.to_categorical(y_train,num_classes=10)

y_test=np_utils.to_categorical(y_test,num_classes=10)

inputs = Input(shape=(784, ))

x = Dense(64, activation='relu')(inputs)

x = Dense(64, activation='relu')(x)

y = Dense(10, activation='softmax')(x)

model = Model(inputs=inputs, outputs=y)

model.save('m1.h5')

model.summary()

model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

model.fit(x_train, y_train, batch_size=32, epochs=10)

#loss,accuracy=model.evaluate(x_test,y_test)

model.save('m2.h5')

model.save_weights('m3.h5')

如上可见,我一共保存了m1.h5, m2.h5, m3.h5 这三个h5文件。那么,我们来看看这三个玩意儿有什么区别。首先,看看大小:

m2表示save()保存的模型结果,它既保持了模型的图结构,又保存了模型的参数。所以它的size最大的。

m1表示save()保存的训练前的模型结果,它保存了模型的图结构,但应该没有保存模型的初始化参数,所以它的size要比m2小很多。

m3表示save_weights()保存的模型结果,它只保存了模型的参数,但并没有保存模型的图结构。所以它的size也要比m2小很多。

通过可视化工具,我们发现:(打开m1和m2均可以显示出以下结构)

而打开m3的时候,可视化工具报错了。由此可以论证, save_weights()是不含有模型结构信息的。

加载模型

两种不同方法保存的模型文件也需要用不同的加载方法。

from keras.models import load_model

model = load_model('m1.h5')

#model = load_model('m2.h5')

#model = load_model('m3.h5')

model.summary()

只有加载m3.h5的时候,这段代码才会报错。其他输出如下:

可见,由save()保存下来的h5文件才可以直接通过load_model()打开!

那么,我们保存下来的参数(m3.h5)该怎么打开呢?

这就稍微复杂一点了,因为m3不含有模型结构信息,所以我们需要把模型结构再描述一遍才可以加载m3,如下:

from keras.models import Model

from keras.layers import Input, Dense

inputs = Input(shape=(784, ))

x = Dense(64, activation='relu')(inputs)

x = Dense(64, activation='relu')(x)

y = Dense(10, activation='softmax')(x)

model = Model(inputs=inputs, outputs=y)

model.load_weights('m3.h5')

以上把m3换成m1和m2也是没有问题的!可见,save()保存的模型除了占用内存大一点以外,其他的优点太明显了。所以,在不怎么缺硬盘空间的情况下,还是建议大家多用save()来存。

注意!如果要load_weights(),必须保证你描述的有参数计算结构与h5文件中完全一致!什么叫有参数计算结构呢?就是有参数坑,直接填进去就行了。我们把上面的非参数结构换了一下,发现h5文件依然可以加载成功,比如将softmax换成relu,依然不影响加载。

对于keras的save()和save_weights(),完全没问题了吧

以上这篇浅谈keras保存模型中的save()和save_weights()区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术淘宝

? ? ? ? 精度前端学习 —— 前端开发100天(置顶) http://alloyteam.github.io/CodeGuide/https://github.com/AlloyTeam/CodeGuide cmd控制台的小技巧:可以直接将文件夹/文件丢进去,这样就会打印出该路径了。 舒服的字体家族…

vue 导出_Vue核心知识:8.3 vuex在vue-cli中的应用,文件之间的导出与引入

问题:vuex在vue-cli中的应用第一步:npm下载vuex资源包:npm install vuex --save第二步:在 src/main.js 中引入import Vue from vue import Vuex from vuexVue.use(Vuex)import store from ./vuex/store第三步:在 src 下…

android界面设计字体大小,Andoird用户界面设计上手指南:设置字体大小

教程详解技术应用: AndroidOS / Android SDK难易程度: 简单预计完成时间: 15分钟【51CTO译文】在本文中,我们将介绍一些简单的处理方式,帮助开发人员轻松编写出能够应对各类设备型号的应用程序文本方案,同时为用户提供自定义文字尺寸功能。别…

回溯算法解决八皇后_4皇后问题和使用回溯算法的解决方案

回溯算法解决八皇后4-皇后问题 (4 - Queens problem) In 4- queens problem, we have 4 queens to be placed on a 4*4 chessboard, satisfying the constraint that no two queens should be in the same row, same column, or in same diagonal. 在4个皇后问题中 &#xff0c…

MAVEN 私有仓库库迁移

一、下载 Nexus:cd /usr/local/srcwget http://download.sonatype.com/nexus/oss/nexus-xxxx-bundle.tar.gz二、安装配置授权 cd /var/app/sudo cp nexus-xxxx-bundle.tar.gz /var/app/cd /var/app/sudo tar xvzf nexus-xxxx-bundle.tar.gzln -s nexus-xxxx nexuscp nexus/bin/…

写python笔记本推荐_写个python程序帮你清理垃圾

起步知识概要【临时文件(*.tmp)】【临时文件(*._mp)】【日志文件(*.log)】【临时帮助文件(*.gid)】【磁盘检查文件(*.chk)】【临时备份文件(*.old)】【Excel备份文件(*.xlk)】【临时备份文件(*.bak)】【COOKIE】 cookies\*.*【文件使用记录】 recent\*.*【IE临时文件】 Tempora…

0623TP框架联系

先用框架查询 namespace Home\Controller;use Home\Controller\FuLeiController; class WccController extends FuLeiController {//查看项目的方法function xiangmu(){$xiangmuD("xiangmu");$zhi$xiangmu->select();$this->assign("zhi",$zhi);$thi…

怎么重置blockinput的锁_OPPOA9锁屏密码忘了怎么办? OPPO忘记锁屏密码的解决办法...

看点:iPhone X原装屏与国产屏有哪些区别?看点:换7P、8P屏幕:C11和DTP和DKH的区别狮淘:不锈钢拆机片5个只需9.9元!包邮!每天10名OPPOA9锁屏密码忘了怎么办?OPPO A9手机忘记了锁屏密码…

Android的面孔_Actiyity

一、什么是Activity&#xff1f; 简单的说&#xff1a;Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成&#xff0c;都会在Manifest.xml中指定一个主的Activity&#xff0c;如下设置 <actionandroid:name"android.in…

vsco怎么两个滤镜叠加_10 款超美的 VSCO 调色滤镜,怎么用都好看!

VSCO 里的滤镜简单 又 好看可太让人喜欢了&#xff01;但是 VSCO 的滤镜实在太多太多了有点让人眼花缭乱~今天旅拍菌请来了 摄影博主 丹丹儿啊专门来为大家盘点一波超美的 VSCO 滤镜合集&#xff01;怎么用 都很好看~微博&#xff1a;丹丹儿啊01滤镜&#xff1a;1ND1锐化&#…

linuxSAMBA共享

转自http://blog.chinaunix.net/uid-20537084-id-2977850.html经常要在Windows与Linux之间共享文件&#xff0c;Samba是一个很常见的选择&#xff1a;Linux运行Samba服务&#xff0c;Windows访问Linux上共享的文件。在不需要用户访问控制的场景下&#xff0c;Samba服务的安全级…

python状态码409_HTTP状态码

HTTP各种相应的状态码HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。它由 RFC 2616 规范定义的&#xff0c;并得到RFC 2518、RFC 2817、RFC 2295、RFC 2774、RFC 4918等规范扩展。中文名HTTP状态码外文名HTTP Status Code规范定义RFC 2616消息端…

Kubernetes Master High Availability 高级实践

才云科技云开源高级工程师唐继元受邀DBAplus社群&#xff0c;在线分享《Kubernetes Master High Availability 高级实践》&#xff0c;介绍如何构建Kubernetes Master High Availability环境。 以下是分享实录&#xff1a; 大家好&#xff0c;我是才云科技的唐继元&#xff0c;…

pythonmysqldb_python中MySQLdb的使用

基本的使用如上&#xff0c;还是很简单的&#xff0c;进一步使用还没操作&#xff0c;先从网上找点资料放上来&#xff0c;以备后续查看1.引入MySQLdb库import MySQLdb2.和数据库建立连接connMySQLdb.connect(host"localhost",user"root",passwd"sa&q…

分布式系统的唯一ID

2019独角兽企业重金招聘Python工程师标准>>> 需求 为什么需要唯一ID 让分布式系统中的需要辨别的元素&#xff0c;都能有唯一的辨识标志。 几乎所有的业务系统&#xff0c;都有生成一个记录标识的需求&#xff0c;例如&#xff1a; 消息标识&#xff1a;message-id订…

python程序跨平台桌面_Python中的跨平台桌面通知程序

在2010年的Pycon大会上有一个presentation on cross-platform Python development。还有一个关于它的html页面&#xff0c;其中包含一些跨平台通知的建议。但是&#xff0c;我在网上找不到它了&#xff0c;但我保存了一个本地副本&#xff0c;这是关于通知的部分&#xff1a;Th…

python去掉html标签_python 去除html标签的几种方法

#! /usr/bin/python# -*- coding:utf-8 -*-created on 2013-12-18author: javaimport refrom htmlparser import htmlparserclass filtertag():def __init__(self):passdef filterhtmltag(self,htmlstr):过滤html中的标签:param htmlstr:html字符串 或是网页源码self.htmlstr …

检查字符串是否包含数字的Python程序

Given a string and we have to check whether it contains only digits or not in Python. 给定一个字符串&#xff0c;我们必须检查它在Python中是否仅包含数字。 To check that a string contains only digits (or a string has a number) – we can use isdigit() functio…

android放微信@功能,Android仿微信语音消息的录制和播放功能

一、简述效果&#xff1a;实现功能&#xff1a;长按Button时改变Button显示文字&#xff0c;弹出Dialog(动态更新音量)&#xff0c;动态生成录音文件&#xff0c;开始录音&#xff1b;监听手指动作&#xff0c;规定区域。录音状态下手指划出规定区域取消录音&#xff0c;删除生…

Golang Clearing slice

//first method :slice nil// second method :slice slice[0:0]Source page : https://www.socketloop.com/tutorials/golang-clearing-slice转载于:https://www.cnblogs.com/Jim-william/p/5630096.html