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 相关文章推荐
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
python定向爬虫校园论坛帖子信息
Jul 23 Python
Python unittest单元测试框架总结
Sep 08 Python
python+opencv实现阈值分割
Dec 26 Python
Django如何防止定时任务并发浅析
May 14 Python
python获取磁盘号下盘符步骤详解
Jun 19 Python
python调用支付宝支付接口流程
Aug 15 Python
python用线性回归预测股票价格的实现代码
Sep 04 Python
解决pyshp UnicodeDecodeError的问题
Dec 06 Python
python实现单张图像拼接与批量图片拼接
Mar 23 Python
使用Pytorch实现two-head(多输出)模型的操作
May 28 Python
Python常遇到的错误和异常
Nov 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
thinkphp模板赋值与替换实例简述
2014/11/24 PHP
PHP用continue跳过本次循环中剩余代码的注意点
2017/06/27 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
javascript设计模式之工厂模式示例讲解
2014/03/04 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
vue实现随机验证码功能的实例代码
2019/04/30 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
2019/09/06 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
Vue多选列表组件深入详解
2021/03/02 Vue.js
Python实现LRU算法的2种方法
2015/06/24 Python
Python实现控制台进度条功能
2016/01/04 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
大学本科生职业生涯规划书范文
2014/09/14 职场文书
三方股份合作协议书
2014/10/13 职场文书
个人简历自我评价怎么写
2015/03/10 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
中学总务处工作总结
2015/08/12 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python