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中的jquery PyQuery库使用小结
May 13 Python
Python实现二叉堆
Feb 03 Python
Python数据类型详解(一)字符串
May 08 Python
详解Python的Twisted框架中reactor事件管理器的用法
May 25 Python
Python实现的对一个数进行因式分解操作示例
Jun 27 Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 Python
Python调用shell cmd方法代码示例解析
Jun 18 Python
Python request中文乱码问题解决方案
Sep 17 Python
python rsa-oaep加密的示例代码
Sep 23 Python
python基础之while循环语句的使用
Apr 20 Python
利用Python判断你的密码难度等级
Jun 02 Python
Python编写nmap扫描工具
Jul 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
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
php 表单数据的获取代码
2009/03/10 PHP
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
js实现简单的左右两边固定广告效果实例
2015/04/10 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
python获取糗百图片代码实例
2013/12/18 Python
Python自动发邮件脚本
2017/03/31 Python
Python单体模式的几种常见实现方法详解
2017/07/28 Python
python如何读取bin文件并下发串口
2019/07/05 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
python实现ftp文件传输功能
2020/03/20 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
英国最好的温室之家:Greenhouses Direct
2019/07/13 全球购物
杭州-DOTNET笔试题集
2013/09/25 面试题
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
2014年营业员工作总结
2014/11/18 职场文书
信息技术国培研修日志
2015/11/13 职场文书
python如何利用traceback获取详细的异常信息
2021/06/05 Python
Python 实现Mac 屏幕截图详解
2021/10/05 Python
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL