学习神经网络的时候,网上的数据集已经分割成了batch,训练的时候直接使用batch.next()就可以获取batch,但是有的时候需要使用自己的数据集,然而自己的数据集不是batch形式,就需要将其转换为batch形式,本文将介绍一个将数据打包成batch的方法。
一、tf.slice_input_producer()
首先需要讲解两个函数,第一个函数是 :tf.slice_input_producer(),这个函数的作用是从输入的tensor_list按要求抽取一个tensor放入文件名队列,下面解释下各个参数:
?
tensor_list 这个就是输入,格式为tensor的列表;一般为[data, label],即由特征和标签组成的数据集
num_epochs 这个是你抽取batch的次数,如果没有给定值,那么将会抽取无数次batch(这会导致你训练过程停不下来),如果给定值,那么在到达次数之后就会报OutOfRange的错误
shuffle 是否随机打乱,如果为False,batch是按顺序抽取;如果为True,batch是随机抽取
seed 随机种子
capcity 队列容量的大小,为整数
name 名称
举个例子:我的data的shape为(4000,10),label的shape为(4000,2),运行下面这行代码
?
结果如图,可以看出返回值为一个包含两组数据的list,每个list的shape与输入的data和label的shape对应
二、tf.train.batch()& tf.train.shuffle_batch()
第二个函数为:tf.train.batch(),tf.train.shuffle_batch(),这个函数的作用为生成大小为batch_size的tensor,下面解释下各个参数:
?
[data,label] 输入的样本和标签
batch_size batch的大小
capcity 队列的容量
num_threads 线程数,使用多少个线程来控制整个队列
allow_smaller_final_batch 这个是当最后的几个样本不够组成一个batch的时候用的参数,如果为True则会重新组成一个batch
下面给出生成batch的函数,由上面两个函数组成:
?
还是同样的输入,batch_size设为2000,看下运行后的返回值的shape:
可以发现,返回是样本数目为2000的tensor,也就是达到了将自己的数据打包成batch的功能
三、batch的使用方法
生成batch只完成了一半,后面的使用方法也比较复杂,直接上一个完整的程序来讲解会方便理解一些:下面代码构建了一个单层感知机,对数据进行分类,主要看一下训练过程中如何使用生成好了的batch,具体细节都写在注释里面了。
?
总共训练的次数为(样本数目/batch_size)*num_epochs
四、 简单生成Batch的方法
最近发现了一种简单生生成batch的方法,实现简单,操作方便,就是时间复杂度可能高了一点,直接上代码。通过np.random.choice方法每次在范围[0, len(all_data))内抽取大小为size的索引。然后通过这部分索引构建batch。
?
以上这篇使用Tensorflow将自己的数据分割成batch训练实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/sinat_35821976/article/details/82668555