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 当前全局变量和入口参数的所有属性
Jul 01 Python
详解Python中的多线程编程
Apr 09 Python
python使用opencv进行人脸识别
Apr 07 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
Jan 10 Python
Python利用Django如何写restful api接口详解
Jun 08 Python
python3判断url链接是否为404的方法
Aug 10 Python
Python使用scipy模块实现一维卷积运算示例
Sep 05 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
Jan 03 Python
详解python中各种文件打开模式
Jan 19 Python
python中urllib.request和requests的使用及区别详解
May 05 Python
Django路由层URLconf作用及原理解析
Sep 24 Python
Python利用matplotlib绘制散点图的新手教程
Nov 05 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
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
用PHP实现维护文件代码
2007/06/14 PHP
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
extjs 学习笔记(三) 最基本的grid
2009/10/15 Javascript
比Jquery的document.ready更快的方法
2010/04/28 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
简单理解vue中Props属性
2016/10/27 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
Python中使用dom模块生成XML文件示例
2015/04/05 Python
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
pandas中Timestamp类用法详解
2017/12/11 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
python selenium 对浏览器标签页进行关闭和切换的方法
2018/05/21 Python
Python多线程原理与用法详解
2018/08/20 Python
python实现微信定时每天和女友发送消息
2019/04/29 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
关于python中导入文件到list的问题
2020/10/31 Python
手术室护士自我鉴定
2013/10/14 职场文书
校班主任推荐信范文
2013/12/03 职场文书
户外婚礼策划方案
2014/02/08 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
2014年科室工作总结
2014/11/20 职场文书
企业战略合作意向书
2015/05/08 职场文书
运动员入场词
2015/07/18 职场文书
2016公司新年问候语
2015/11/11 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
2016年社区党支部公开承诺书
2016/03/25 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript