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使用os模块的os.walk遍历文件夹示例
Jan 27 Python
跟老齐学Python之for循环语句
Oct 02 Python
python监控网站运行异常并发送邮件的方法
Mar 13 Python
Python的装饰器用法学习笔记
Jun 24 Python
Python利用字典将两个通讯录文本合并为一个文本实例
Jan 16 Python
pycharm创建scrapy项目教程及遇到的坑解析
Aug 15 Python
Django1.11自带分页器paginator的使用方法
Oct 31 Python
numpy创建单位矩阵和对角矩阵的实例
Nov 29 Python
python enumerate内置函数用法总结
Jan 07 Python
什么是python的列表推导式
May 26 Python
Python如何急速下载第三方库详解
Nov 02 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 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
香妃
2021/03/03 冲泡冲煮
第二节 对象模型 [2]
2006/10/09 PHP
不用数据库的多用户文件自由上传投票系统(3)
2006/10/09 PHP
php入门小知识
2008/03/24 PHP
PHP调用Twitter的RSS的实现代码
2010/03/10 PHP
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
AngularJS实现使用路由切换视图的方法
2017/01/24 Javascript
layui数据表格重载实现往后台传参
2019/11/15 Javascript
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
python matlibplot绘制3D图形
2018/07/02 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
Python常用库大全及简要说明
2020/01/17 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
Java里面如何创建一个内部类的实例
2015/01/19 面试题
大学生职业生涯设计书
2014/01/02 职场文书
大学班级干部的自我评价分享
2014/02/10 职场文书
医学专业应届生的自我评价
2014/02/28 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
单位委托书怎么写
2014/08/02 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
高中数学课堂教学反思
2016/02/18 职场文书