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 相关文章推荐
Django中使用group_by的方法
May 26 Python
python从入门到精通(DAY 3)
Dec 20 Python
python实现class对象转换成json/字典的方法
Mar 11 Python
python读写json文件的简单实现
Apr 11 Python
基于循环神经网络(RNN)实现影评情感分类
Mar 26 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
Mar 01 Python
详解python:time模块用法
Mar 25 Python
Python按照list dict key进行排序过程解析
Apr 04 Python
Python常用模块函数代码汇总解析
Aug 31 Python
Python之字典添加元素的几种方法
Sep 30 Python
Ubuntu权限不足无法创建文件夹解决方案
Nov 14 Python
教你如何使用Python Tkinter库制作记事本
Jun 10 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
ajax实现无刷新分页(php)
2010/07/18 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
php+mysql数据库查询实例
2015/01/21 PHP
php操作redis缓存方法分享
2015/06/03 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
2016/11/05 PHP
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
奇妙的js
2007/09/24 Javascript
js 学习笔记(三)
2009/12/29 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
[04:10]2018年度CS GO玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Python输出\u编码将其转换成中文的实例
2018/12/15 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
python elasticsearch环境搭建详解
2019/09/02 Python
Python命令行click参数用法解析
2019/12/19 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
为有想象力的人提供的生活方式商店:Firebox
2018/06/04 全球购物
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
工作失误检讨书范文大全
2014/01/13 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
幼儿园教师求职信
2015/03/20 职场文书
go goroutine 怎样进行错误处理
2021/07/16 Golang
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS
Android Studio 计算器开发
2022/05/20 Java/Android