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学习笔记_数据排序方法
May 22 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
Jun 28 Python
Python中import导入上一级目录模块及循环import问题的解决
Jun 04 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
Jun 23 Python
Python数据结构之顺序表的实现代码示例
Nov 15 Python
numpy 进行数组拼接,分别在行和列上合并的实例
May 08 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
Jun 17 Python
tensorflow 自定义损失函数示例代码
Feb 05 Python
python中id函数运行方式
Jul 03 Python
使用Python解析Chrome浏览器书签的示例
Nov 13 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
收音机另类DIY - 纸巾盒做外壳
2021/03/02 无线电
隐藏你的.php文件的实现方法
2007/03/19 PHP
php ajax 静态分页过程形式
2011/09/02 PHP
PHP通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
Javascript开发之三数组对象实例介绍
2012/11/12 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
浅谈JavaScript的计时器对象
2016/12/26 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
Angular中支持SCSS的方法
2017/11/18 Javascript
Angularjs实现页面模板清除的方法
2018/07/20 Javascript
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
JavaScript实现图片轮播特效
2019/10/23 Javascript
JavaScript实现简单进度条效果
2020/03/25 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
python定时器使用示例分享
2014/02/16 Python
Python中property属性实例解析
2018/02/10 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
工艺工程师岗位职责
2014/03/04 职场文书
黄金搭档广告词
2014/03/21 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
年中了,该如何写好个人述职报告?
2019/07/02 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python
带你了解CSS基础知识,样式
2021/07/21 HTML / CSS