tensorflow中next_batch的具体使用


Posted in Python onFebruary 02, 2018

本文介绍了tensorflow中next_batch的具体使用,分享给大家,具体如下:

此处给出了几种不同的next_batch方法,该文章只是做出代码片段的解释,以备以后查看:

def next_batch(self, batch_size, fake_data=False):
  """Return the next `batch_size` examples from this data set."""
  if fake_data:
   fake_image = [1] * 784
   if self.one_hot:
    fake_label = [1] + [0] * 9
   else:
    fake_label = 0
   return [fake_image for _ in xrange(batch_size)], [
     fake_label for _ in xrange(batch_size)
   ]
  start = self._index_in_epoch
  self._index_in_epoch += batch_size
  if self._index_in_epoch > self._num_examples: # epoch中的句子下标是否大于所有语料的个数,如果为True,开始新一轮的遍历
   # Finished epoch
   self._epochs_completed += 1
   # Shuffle the data
   perm = numpy.arange(self._num_examples) # arange函数用于创建等差数组
   numpy.random.shuffle(perm) # 打乱
   self._images = self._images[perm]
   self._labels = self._labels[perm]
   # Start next epoch
   start = 0
   self._index_in_epoch = batch_size
   assert batch_size <= self._num_examples
  end = self._index_in_epoch
  return self._images[start:end], self._labels[start:end]

该段代码摘自mnist.py文件,从代码第12行start = self._index_in_epoch开始解释,_index_in_epoch-1是上一次batch个图片中最后一张图片的下边,这次epoch第一张图片的下标是从 _index_in_epoch开始,最后一张图片的下标是_index_in_epoch+batch, 如果 _index_in_epoch 大于语料中图片的个数,表示这个epoch是不合适的,就算是完成了语料的一遍的遍历,所以应该对图片洗牌然后开始新一轮的语料组成batch开始

def ptb_iterator(raw_data, batch_size, num_steps):
 """Iterate on the raw PTB data.

 This generates batch_size pointers into the raw PTB data, and allows
 minibatch iteration along these pointers.

 Args:
  raw_data: one of the raw data outputs from ptb_raw_data.
  batch_size: int, the batch size.
  num_steps: int, the number of unrolls.

 Yields:
  Pairs of the batched data, each a matrix of shape [batch_size, num_steps].
  The second element of the tuple is the same data time-shifted to the
  right by one.

 Raises:
  ValueError: if batch_size or num_steps are too high.
 """
 raw_data = np.array(raw_data, dtype=np.int32)

 data_len = len(raw_data)
 batch_len = data_len // batch_size #有多少个batch
 data = np.zeros([batch_size, batch_len], dtype=np.int32) # batch_len 有多少个单词
 for i in range(batch_size): # batch_size 有多少个batch
  data[i] = raw_data[batch_len * i:batch_len * (i + 1)]

 epoch_size = (batch_len - 1) // num_steps # batch_len 是指一个batch中有多少个句子
 #epoch_size = ((len(data) // model.batch_size) - 1) // model.num_steps # // 表示整数除法
 if epoch_size == 0:
  raise ValueError("epoch_size == 0, decrease batch_size or num_steps")

 for i in range(epoch_size):
  x = data[:, i*num_steps:(i+1)*num_steps]
  y = data[:, i*num_steps+1:(i+1)*num_steps+1]
  yield (x, y)

第三种方式:

def next(self, batch_size):
    """ Return a batch of data. When dataset end is reached, start over.
    """
    if self.batch_id == len(self.data):
      self.batch_id = 0
    batch_data = (self.data[self.batch_id:min(self.batch_id +
                         batch_size, len(self.data))])
    batch_labels = (self.labels[self.batch_id:min(self.batch_id +
                         batch_size, len(self.data))])
    batch_seqlen = (self.seqlen[self.batch_id:min(self.batch_id +
                         batch_size, len(self.data))])
    self.batch_id = min(self.batch_id + batch_size, len(self.data))
    return batch_data, batch_labels, batch_seqlen

第四种方式:

def batch_iter(sourceData, batch_size, num_epochs, shuffle=True):
  data = np.array(sourceData) # 将sourceData转换为array存储
  data_size = len(sourceData)
  num_batches_per_epoch = int(len(sourceData) / batch_size) + 1
  for epoch in range(num_epochs):
    # Shuffle the data at each epoch
    if shuffle:
      shuffle_indices = np.random.permutation(np.arange(data_size))
      shuffled_data = sourceData[shuffle_indices]
    else:
      shuffled_data = sourceData

    for batch_num in range(num_batches_per_epoch):
      start_index = batch_num * batch_size
      end_index = min((batch_num + 1) * batch_size, data_size)

      yield shuffled_data[start_index:end_index]

迭代器的用法,具体学习Python迭代器的用法

另外需要注意的是,前三种方式只是所有语料遍历一次,而最后一种方法是,所有语料遍历了num_epochs次

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现百度关键词排名查询
Mar 30 Python
Python脚本实现网卡流量监控
Feb 14 Python
python Django批量导入数据
Mar 25 Python
python和flask中返回JSON数据的方法
Mar 26 Python
Python实现基于PIL和tesseract的验证码识别功能示例
Jul 11 Python
梅尔倒谱系数(MFCC)实现
Jun 19 Python
Python数据可视化实现正态分布(高斯分布)
Aug 21 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
18个Python脚本可加速你的编码速度(提示和技巧)
Oct 17 Python
pycharm的python_stubs问题
Apr 08 Python
Python实现汇率转换操作
May 03 Python
python编程项目中线上问题排查与解决
Nov 01 Python
Python输出各行命令详解
Feb 01 #Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
Feb 01 #Python
Python实现的视频播放器功能完整示例
Feb 01 #Python
Python线性回归实战分析
Feb 01 #Python
Python使用matplotlib简单绘图示例
Feb 01 #Python
Python解决抛小球问题 求小球下落经历的距离之和示例
Feb 01 #Python
Python 判断 有向图 是否有环的实例讲解
Feb 01 #Python
You might like
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
jQueryUI的Dialog的简单封装
2010/06/07 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
2015/07/27 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
JavaScript中eval函数的问题
2016/01/31 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
javascript基础知识
2016/06/07 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
JS打印组合功能
2016/08/04 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
在VUE中使用lodash的debounce和throttle操作
2020/11/09 Javascript
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
Python合并同一个文件夹下所有PDF文件的方法
2019/03/11 Python
python 将字符串完成特定的向右移动方法
2019/06/11 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
python 命名规范知识点汇总
2020/02/14 Python
python 实现线程之间的通信示例
2020/02/14 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
一道Delphi上机题
2012/06/04 面试题
毕业生的求职信范文分享
2013/12/04 职场文书
店长助理岗位职责
2013/12/13 职场文书
小学家长会邀请函
2014/01/23 职场文书
中班下学期个人总结
2015/02/12 职场文书
2015年度残疾人工作总结
2015/05/14 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android
python中if和elif的区别介绍
2021/11/07 Python
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫