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捕捉和模拟鼠标事件的方法
Jun 03 Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 Python
Python基础学习之常见的内建函数整理
Sep 06 Python
python批量解压zip文件的方法
Aug 20 Python
python global关键字的用法详解
Sep 05 Python
Python实现图片批量加入水印代码实例
Nov 30 Python
python单向循环链表原理与实现方法示例
Dec 03 Python
python操作cfg配置文件方式
Dec 22 Python
django 实现手动存储文件到model的FileField
Mar 30 Python
python的Jenkins接口调用方式
May 12 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 Python
python statsmodel的使用
Dec 21 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字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
laravel 获取某个查询的查询SQL语句方法
2019/10/12 PHP
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
JS实现的车标图片提示效果代码
2015/10/10 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
纯JS实现可用于页码更换的飞页特效示例
2018/05/21 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
Python 正则表达式入门(中级篇)
2016/12/07 Python
Python排序算法实例代码
2017/08/10 Python
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
python和php哪个更适合写爬虫
2020/06/22 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
北京银河万佳Java面试题
2012/03/21 面试题
品牌宣传方案
2014/03/21 职场文书
毕业生学校推荐信范文
2014/05/21 职场文书
学校做一个有道德的人活动方案
2014/08/23 职场文书
政工例会汇报材料
2014/08/26 职场文书
群众路线党员个人剖析材料
2014/10/08 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang
python接口测试返回数据为字典取值方式
2022/02/12 Python