浅谈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条件和循环的使用方法
Nov 01 Python
Python内置函数的用法实例教程
Sep 08 Python
使用Python来开发Markdown脚本扩展的实例分享
Mar 04 Python
Python运算符重载详解及实例代码
Mar 07 Python
python用户评论标签匹配的解决方法
May 31 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
Aug 02 Python
python实现抽奖小程序
Apr 15 Python
用pycharm开发django项目示例代码
Jun 13 Python
python 标准差计算的实现(std)
Jul 29 Python
Python中使用gflags实例及原理解析
Dec 13 Python
python3通过udp实现组播数据的发送和接收操作
May 05 Python
Python实现为PDF去除水印的示例代码
Apr 03 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
PHP中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
用PHP函数解决SQL injection
2006/12/09 PHP
IIS6的PHP最佳配置方法
2007/03/19 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
XMLHTTPRequest的属性和方法简介
2010/11/23 Javascript
extjs中grid中嵌入动态combobox的应用
2011/01/01 Javascript
js中将String转换为number以便比较
2014/07/08 Javascript
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
jQuery Checkbox 全选 反选的简单实例
2016/11/29 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
NProgress显示顶部进度条效果及使用详解
2019/09/21 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
简单介绍Python中的try和finally和with方法
2015/05/05 Python
python检查指定文件是否存在的方法
2015/07/06 Python
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
python opencv旋转图像(保持图像不被裁减)
2018/07/26 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
伦敦哈德森鞋:Hudson Shoes
2018/02/06 全球购物
就业协议书的作用
2014/04/11 职场文书
英文求职信范文
2014/05/23 职场文书
滞留工资返还协议书
2014/10/19 职场文书
2014年团支书工作总结
2014/11/14 职场文书
人与自然的观后感
2015/06/18 职场文书