浅谈Keras中shuffle和validation_split的顺序


Posted in Python onJune 19, 2020

模型的fit函数有两个参数,shuffle用于将数据打乱,validation_split用于在没有提供验证集的时候,按一定比例从训练集中取出一部分作为验证集

这里有个陷阱是,程序是先执行validation_split,再执行shuffle的,所以会出现这种情况:

假如你的训练集是有序的,比方说正样本在前负样本在后,又设置了validation_split,那么你的验证集中很可能将全部是负样本

同样的,这个东西不会有任何错误报出来,因为Keras不可能知道你的数据有没有经过shuffle,保险起见如果你的数据是没shuffle过的,最好手动shuffle一下

补充知识:Keras使用陷阱

1 TF卷积核与TH卷积核

Keras提供了两套后端,Theano和Tensorflow。如果你从无到有搭建自己的一套网络,则大可放心。但如果你想使用一个已有网络,或把一个用th/tf 训练的网络以另一种后端应用,在载入的时候你就应该特别小心了。

卷积核与所使用的后端不匹配,不会报任何错误,因为它们的shape是完全一致的,没有方法能够检测出这种错误。

在使用预训练模型时,一个建议是首先找一些测试样本,看看模型的表现是否与预计的一致。

如需对卷积核进行转换,可以使用utils.convert_all_kernels_in_model对模型的所有卷积核进行转换

2 向BN层中载入权重

如果你不知道从哪里淘来一个预训练好的BN层,想把它的权重载入到Keras中,要小心参数的载入顺序。

一个典型的例子是,将caffe的BN层参数载入Keras中,caffe的BN由两部分构成,bn层的参数是mean,std,scale层的参数是gamma,beta。

按照BN的文章顺序,似乎载入Keras BN层的参数应该是[mean, std, gamma, beta];

然而不是的,Keras的BN层参数顺序应该是[gamma, beta, mean, std],这是因为gamma和beta是可训练的参数,而mean和std不是。Keras的可训练参数在前,不可训练参数在后

错误的权重顺序不会引起任何报错,因为它们的shape完全相同

3 shuffle和validation_split的顺序

模型的fit函数有两个参数,shuffle用于将数据打乱,validation_split用于在没有提供验证集的时候,按一定比例从训练集中取出一部分作为验证集.

这里有个陷阱是,程序是先执行validation_split,再执行shuffle的,所以会出现这种情况:

假如你的训练集是有序的,比方说正样本在前负样本在后,又设置了validation_split,那么你的验证集中很可能将全部是负样本。

同样的,这个东西不会有任何错误报出来,因为Keras不可能知道你的数据有没有经过shuffle,保险起见如果你的数据是没shuffle过的,最好手动shuffle一下。

4 Merge层的层对象与函数方法

Keras定义了一套用于融合张量的方法,位于keras.layers.Merge,里面有两套工具,以大写字母开头的是Keras Layer类,使用这种工具是需要实例化一个Layer对象,然后再使用。以小写字母开头的是张量函数方法,本质上是对Merge Layer对象的一个包装,但使用更加方便一些。注意辨析。

以上这篇浅谈Keras中shuffle和validation_split的顺序就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python批量修改文件名的实现代码
Sep 01 Python
在Python中使用lambda高效操作列表的教程
Apr 24 Python
举例讲解Python中的身份运算符的使用方法
Oct 13 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
Jan 04 Python
python 运用Django 开发后台接口的实例
Dec 11 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 Python
解决Django migrate不能发现app.models的表问题
Aug 31 Python
Python:type、object、class与内置类型实例
Dec 25 Python
python实现拼图小游戏
Feb 22 Python
基于打开pycharm有带图片md文件卡死问题的解决
Apr 24 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
Jun 24 Python
python中的列表和元组区别分析
Dec 30 Python
Python爬虫headers处理及网络超时问题解决方案
Jun 19 #Python
sklearn和keras的数据切分与交叉验证的实例详解
Jun 19 #Python
Python虚拟环境的创建和包下载过程分析
Jun 19 #Python
通过实例解析python创建进程常用方法
Jun 19 #Python
keras model.fit 解决validation_spilt=num 的问题
Jun 19 #Python
为什么是 Python -m
Jun 19 #Python
Python 私有属性和私有方法应用场景分析
Jun 19 #Python
You might like
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
php自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
PHP通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
php错误日志简单配置方法
2016/07/11 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
用JavaScript事件串连执行多个处理过程的方法
2007/03/09 Javascript
不错的JS中变量相关的细节分析
2007/08/13 Javascript
javascript call方法使用说明
2010/01/11 Javascript
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
TypeScript 中接口详解
2015/06/19 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
微信小程序侧边栏滑动特效(左右滑动)
2017/01/23 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
抖音上用记事本编写爱心小程序教程
2019/04/17 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
jQuery实现全选按钮
2021/01/01 jQuery
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
python 画条形图(柱状图)实例
2020/04/24 Python
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
授权委托书协议书
2014/10/16 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫