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的高级Git库 Gittle
Sep 22 Python
bpython 功能强大的Python shell
Feb 16 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
May 25 Python
python使用fcntl模块实现程序加锁功能示例
Jun 23 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
Python函数中不定长参数的写法
Feb 13 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
Aug 08 Python
python协程gevent案例 爬取斗鱼图片过程解析
Aug 27 Python
python 实现批量替换文本中的某部分内容
Dec 13 Python
python判断是空的实例分享
Jul 06 Python
深入了解Python装饰器的高级用法
Aug 13 Python
python mongo 向数据中的数组类型新增数据操作
Dec 05 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
怎么使 Mysql 数据同步
2006/10/09 PHP
PHP的构造方法,析构方法和this关键字详细介绍
2013/10/22 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
php 数据结构之链表队列
2017/10/17 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
laravel框架学习笔记之组件化开发实现方法
2020/02/01 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
基于JQuery打造无缝滚动新闻步骤详解
2016/03/31 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
Angular4开发解决跨域问题详解
2017/08/28 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
python中定义结构体的方法
2013/03/04 Python
Python实现设置windows桌面壁纸代码分享
2015/03/28 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
Django数据库连接丢失问题的解决方法
2018/12/29 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
SOKOLOV官网:俄罗斯珠宝首饰品牌
2021/01/02 全球购物
好军嫂事迹材料
2014/01/15 职场文书
小学中秋节活动方案
2014/02/06 职场文书
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
目标责任书范文
2014/04/14 职场文书
小学生寒假家长评语
2014/04/16 职场文书
优秀学生干部事迹材料
2014/12/24 职场文书
董事长助理岗位职责
2015/02/11 职场文书
新生儿未入户证明
2015/06/23 职场文书
2016年小学生迎国庆广播稿
2015/12/18 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
Python 阶乘详解
2021/10/05 Python