浅谈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 相关文章推荐
Python2中的raw_input() 与 input()
Jun 12 Python
Python计算已经过去多少个周末的方法
Jul 25 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
Python中函数eval和ast.literal_eval的区别详解
Aug 10 Python
浅谈django的render函数的参数问题
Oct 16 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
python GUI图形化编程wxpython的使用
Jul 19 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
Sep 29 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
django数据模型on_delete, db_constraint的使用详解
Dec 24 Python
Python将字典转换为XML的方法
Aug 01 Python
Python实现列表拼接和去重的三种方式
Jul 02 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
让这部DC动画新作刷新你的认知
2020/03/03 欧美动漫
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
PHP制作图形验证码代码分享
2014/10/23 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
Laravel手动分页实现方法详解
2016/10/09 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
浏览器无法运行JAVA脚本的解决方法
2008/01/09 Javascript
仿谷歌主页js动画效果实现代码
2013/07/14 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
聊一聊jQuery插件uploadify使用方法
2016/08/24 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
vue权限路由实现的方法示例总结
2018/07/29 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python isinstance判断对象类型
2008/09/06 Python
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
Python 装饰器深入理解
2017/03/16 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
解决python中0x80072ee2错误的方法
2020/07/19 Python
部队学习十八大感言
2014/01/11 职场文书
请假条的格式
2014/04/11 职场文书
电钳工人个人求职信
2014/05/10 职场文书
工厂车间标语
2014/06/19 职场文书
公司开业主持词
2015/07/02 职场文书
感恩教师节主题班会
2015/08/12 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
解决ObjectMapper.convertValue() 遇到的一些问题
2021/06/30 Java/Android
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js