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脚本帮你找出微信上删除你好友的人
Jan 07 Python
python黑魔法之参数传递
Feb 12 Python
python实现按行切分文本文件的方法
Apr 18 Python
python中logging包的使用总结
Feb 28 Python
Python Matplotlib库安装与基本作图示例
Jan 09 Python
python 获取毫秒数,计算调用时长的方法
Feb 20 Python
Python 存储字符串时节省空间的方法
Apr 23 Python
python3人脸识别的两种方法
Apr 25 Python
Python程序包的构建和发布过程示例详解
Jun 09 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
Aug 13 Python
python读取Excel表格文件的方法
Sep 02 Python
浅谈盘点5种基于Python生成的个性化语音方法
Feb 05 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
Zend公司全球首推PHP认证
2006/10/09 PHP
一个简单的PHP验证码实现代码
2014/05/10 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
2019/10/18 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
jQuery插件开发全解析
2012/10/10 Javascript
js实现的点击div区域外隐藏div区域
2014/06/30 Javascript
js中的getAttribute方法使用示例
2014/08/01 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
2016/02/15 Javascript
js实现随机点名小功能
2017/08/17 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
python合并文本文件示例
2014/02/07 Python
python写的ARP攻击代码实例
2014/06/04 Python
让Python代码更快运行的5种方法
2015/06/21 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
Python使用Phantomjs截屏网页的方法
2018/05/17 Python
python调用tcpdump抓包过滤的方法
2018/07/18 Python
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
Timex手表官网:美国运动休闲手表品牌
2017/01/28 全球购物
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
自主招生自荐信指南
2014/02/04 职场文书
2014年审计工作总结
2014/11/17 职场文书
农村党员干部承诺书
2015/05/04 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
工作计划范文之财务管理
2019/08/09 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript
springboot如何初始化执行sql语句
2021/06/22 Java/Android
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript