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实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
django通过ajax发起请求返回JSON格式数据的方法
Jun 04 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 Python
详解python调度框架APScheduler使用
Mar 28 Python
python3+opencv3识别图片中的物体并截取的方法
Dec 05 Python
Python编程图形库之Pillow使用方法讲解
Dec 28 Python
Pytorch实现的手写数字mnist识别功能完整示例
Dec 13 Python
linux环境下安装python虚拟环境及注意事项
Jan 07 Python
python3实现网页版raspberry pi(树莓派)小车控制
Feb 12 Python
Python进程间通信multiprocess代码实例
Mar 18 Python
Pycharm无法打开双击没反应的问题及解决方案
Aug 17 Python
Python 远程开关机的方法
Nov 18 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写的简易聊天室代码
2011/06/04 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
Javascript select下拉框操作常用方法
2009/11/09 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
2013/04/02 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
javascript 判断当前浏览器版本并判断ie版本
2017/02/17 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
详解vue 命名视图
2019/08/14 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
如何HttpServletRequest文件对象并储存
2020/08/14 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
2020/11/20 Python
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
Brydge英国:适用于Apple iPad和Microsoft Surface Pro的蓝牙键盘
2019/05/16 全球购物
创业计划书六个要素
2013/12/26 职场文书
七一讲话心得体会
2014/09/05 职场文书
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书
思想品德评语大全
2014/12/31 职场文书
外国人来华邀请函
2015/01/31 职场文书
团员个人总结
2015/02/26 职场文书