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实现简单socket通信的方法
Apr 19 Python
python实现闹钟定时播放音乐功能
Jan 25 Python
Python求解任意闭区间的所有素数
Jun 10 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
django 使用 PIL 压缩图片的例子
Aug 16 Python
Python终端输出彩色字符方法详解
Feb 11 Python
keras读取h5文件load_weights、load代码操作
Jun 12 Python
基于python模拟bfs和dfs代码实例
Nov 19 Python
Python道路车道线检测的实现
Jun 27 Python
详解Python内置模块Collections
Mar 22 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之第八天
2006/10/09 PHP
php date与gmdate的获取日期的区别
2010/02/08 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
2014/09/01 Javascript
JavaScript获取文本框内选中文本的方法
2015/02/20 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
JS实现仿QQ效果的三级竖向菜单
2015/09/25 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
js Dom实现换肤效果
2017/10/21 Javascript
vue + vuex todolist的实现示例代码
2018/03/09 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
javascript实现前端分页效果
2020/06/24 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
Python Selenium 之数据驱动测试的实现
2019/08/01 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
建筑工程造价专业自荐信
2014/07/08 职场文书
2014年工会工作总结
2014/11/12 职场文书
公司开会通知
2015/04/20 职场文书
2015年学校远程教育工作总结
2015/07/20 职场文书
单位车辆管理制度
2015/08/05 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL