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 相关文章推荐
pycharm 使用心得(一)安装和首次使用
Jun 05 Python
Python新手在作用域方面经常容易碰到的问题
Apr 03 Python
Python 爬虫爬取指定博客的所有文章
Feb 17 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
python 输入一个数n,求n个数求乘或求和的实例
Nov 13 Python
python截取两个单词之间的内容方法
Dec 25 Python
深入浅析Python中的迭代器
Jun 04 Python
python2使用bs4爬取腾讯社招过程解析
Aug 14 Python
Python pip install之SSL异常处理操作
Sep 03 Python
java关于string最常出现的面试题整理
Jan 18 Python
python 多线程爬取壁纸网站的示例
Feb 20 Python
TensorFlow中tf.batch_matmul()的用法
Jun 02 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
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
2013/11/22 Javascript
网页广告中JS代码的信息监听示例
2014/04/02 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
jstree的简单实例
2016/12/01 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
python中global与nonlocal比较
2014/11/21 Python
Python3中多线程编程的队列运作示例
2015/04/16 Python
pycharm 主题theme设置调整仿sublime的方法
2018/05/23 Python
使用Python更换外网IP的方法
2018/07/09 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
python如何通过twisted搭建socket服务
2020/02/03 Python
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
个人自我剖析材料
2014/02/07 职场文书
英语国培研修感言
2014/02/13 职场文书
销售内勤岗位职责
2014/04/15 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
小学班主任工作随笔
2015/08/15 职场文书
学校教代会开幕词
2016/03/04 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书