TensorFlow dataset.shuffle、batch、repeat的使用详解


Posted in Python onJanuary 21, 2020

直接看代码例子,有详细注释!!

import tensorflow as tf
import numpy as np


d = np.arange(0,60).reshape([6, 10])

# 将array转化为tensor
data = tf.data.Dataset.from_tensor_slices(d)

# 从data数据集中按顺序抽取buffer_size个样本放在buffer中,然后打乱buffer中的样本
# buffer中样本个数不足buffer_size,继续从data数据集中安顺序填充至buffer_size,
# 此时会再次打乱
data = data.shuffle(buffer_size=3)

# 每次从buffer中抽取4个样本
data = data.batch(4)

# 将data数据集重复,其实就是2个epoch数据集
data = data.repeat(2)

# 构造获取数据的迭代器
iters = data.make_one_shot_iterator()

# 每次从迭代器中获取一批数据
batch = iters.get_next()

sess = tf.Session()

sess.run(batch)
# 数据集完成遍历完之后,继续抽取的话会报错:OutOfRangeError
In [21]: d
Out[21]: 
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
  [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
  [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
  [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
  [40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
  [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]])
In [22]: sess.run(batch)
Out[22]: 
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
  [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
  [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
  [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]])

In [23]: sess.run(batch)
Out[23]: 
array([[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
  [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]])

从输出结果可以看出:

shuffle是按顺序将数据放入buffer里面的;

当repeat函数在shuffle之后的话,是将一个epoch的数据集抽取完毕,再进行下一个epoch的。

那么,当repeat函数在shuffle之前会怎么样呢?如下:

data = data.repeat(2)

data = data.shuffle(buffer_size=3)

data = data.batch(4)
In [25]: sess.run(batch)
Out[25]: 
array([[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
  [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
  [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
  [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]])

In [26]: sess.run(batch)
Out[26]: 
array([[50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
  [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
  [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
  [30, 31, 32, 33, 34, 35, 36, 37, 38, 39]])

In [27]: sess.run(batch)
Out[27]: 
array([[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
  [50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
  [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
  [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]])

可以看出,其实它就是先将数据集复制一遍,然后把两个epoch当成同一个新的数据集,一直shuffle和batch下去。

以上这篇TensorFlow dataset.shuffle、batch、repeat的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 随机生成中文验证码的实例代码
Mar 20 Python
用Python编写一个简单的俄罗斯方块游戏的教程
Apr 03 Python
Python的多态性实例分析
Jul 07 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
Jan 20 Python
python学习之编写查询ip程序
Feb 27 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
Python Unittest根据不同测试环境跳过用例的方法
Dec 16 Python
Python  Django 母版和继承解析
Aug 09 Python
python模拟键盘输入 切换键盘布局过程解析
Aug 15 Python
Django自定义列表 models字段显示方式
Apr 03 Python
python如何求100以内的素数
May 27 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 #Python
python爬取本站电子书信息并入库的实现代码
Jan 20 #Python
浅谈Tensorflow 动态双向RNN的输出问题
Jan 20 #Python
关于tf.nn.dynamic_rnn返回值详解
Jan 20 #Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
Jan 20 #Python
关于tf.reverse_sequence()简述
Jan 20 #Python
tensorflow使用range_input_producer多线程读取数据实例
Jan 20 #Python
You might like
php获取文件后缀的9种方法
2016/03/22 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
百度 popup.js 完美修正版非常的不错 脚本之家推荐
2009/04/17 Javascript
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
2014/06/16 Javascript
js获取当前日期时间及其它操作汇总
2015/04/17 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
基于jQuery ligerUI实现分页样式
2016/09/18 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
React组件中的this的具体使用
2018/02/28 Javascript
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
前端开发之便利店收银系统代码
2019/12/27 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
Python3基础之list列表实例解析
2014/08/13 Python
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
Python实现文件内容批量追加的方法示例
2017/08/29 Python
python批量获取html内body内容的实例
2019/01/02 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
python 两个数据库postgresql对比
2019/10/21 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
加拿大最大的相机店:Henry’s
2017/05/17 全球购物
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
中专毕业个人的自荐信格式
2013/09/21 职场文书
采购部岗位职责
2013/11/24 职场文书
环保志愿者活动总结
2014/06/27 职场文书
文明旅游倡议书
2015/04/28 职场文书
工作态度检讨书范文
2015/05/06 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
婚宴新郎致辞
2015/07/28 职场文书
2016年春节慰问信息大全
2015/11/30 职场文书
使用scrapy实现增量式爬取方式
2022/06/21 Python