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 27 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 Python
Python多重继承的方法解析执行顺序实例分析
May 26 Python
Pandas:DataFrame对象的基础操作方法
Jun 07 Python
解决Pandas的DataFrame输出截断和省略的问题
Feb 08 Python
关于pycharm中pip版本10.0无法使用的解决办法
Oct 10 Python
tensorflow mnist 数据加载实现并画图效果
Feb 05 Python
Django 允许局域网中的机器访问你的主机操作
May 13 Python
Django实现后台上传并显示图片功能
May 29 Python
python在linux环境下安装skimage的示例代码
Oct 14 Python
pyqt5实现井字棋的示例代码
Dec 07 Python
举例讲解Python装饰器
Dec 24 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
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
ThinkPHP中html:list标签用法分析
2016/01/09 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
JavaScript 编程引入命名空间的方法
2007/06/29 Javascript
用javascript获取textarea中的光标位置
2008/05/06 Javascript
JQUERY操作JSON实例代码
2010/02/09 Javascript
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
你必须知道的Javascript知识点之&quot;单线程事件驱动&quot;的使用
2013/04/23 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
2014/07/18 Javascript
jQuery实现宽屏图片轮播实例教程
2015/11/24 Javascript
javascript弹出窗口中增加确定取消按钮
2016/06/24 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
Webstorm2016使用技巧(SVN插件使用)
2018/10/29 Javascript
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
Python 操作MySQL详解及实例
2017/04/30 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
Prototype是怎么扩展DOM的
2014/10/01 面试题
体育老师的教学自我评价分享
2013/11/19 职场文书
节水倡议书
2015/01/19 职场文书
实习介绍信范文
2015/05/05 职场文书