浅谈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 相关文章推荐
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
Dec 04 Python
从零学python系列之数据处理编程实例(二)
May 22 Python
用Python操作字符串之rindex()方法的使用
May 19 Python
简单介绍Python的Django框架的dj-scaffold项目
May 30 Python
Python实现脚本锁功能(同时只能执行一个脚本)
May 10 Python
Python利用flask sqlalchemy实现分页效果
Aug 02 Python
python解决pandas处理缺失值为空字符串的问题
Apr 08 Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 Python
python使用thrift教程的方法示例
Mar 21 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
django ajax发送post请求的两种方法
Jan 05 Python
python爬取音频下载的示例代码
Oct 19 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
Protoss热键控制
2020/03/14 星际争霸
php入门小知识
2008/03/24 PHP
Yii使用Captcha验证码的方法
2015/12/28 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
jQuery短信验证倒计时功能实现方法详解
2016/05/25 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
数组Array的一些方法(总结)
2017/02/17 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
基于Python os模块常用命令介绍
2017/11/03 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
Python爬取成语接龙类网站
2018/10/19 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
详解pandas赋值失败问题解决
2020/11/29 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
初级Java程序员面试题
2016/03/03 面试题
员工团队活动方案
2014/08/28 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
单位计划生育责任书
2015/05/09 职场文书
安全生产会议制度
2015/08/06 职场文书
方法汇总:Python 安装第三方库常用
2022/04/26 Python