学术渣滓在自己改代码的时候遇到了一个大问题。从github上下载下来的代码用的训练集大多数都是minst集。如果想用这个代码训练自己的数据,就需要自己动动手改代码。一切进行的都很顺利,把所有有minst集的地方都改成自己的数据集就可以了。最后我发现了一个大问题,我的batch需要自己写。本来想着抄minst的作业,查了一下参考的minst集是怎么做的,这个居然是TensorFlow自己写好的。自己尝试改了一下,当时忘记自己为啥放弃了,懒人一定是觉得太难改了。不过没关系,CSDN的大佬一定会告诉你怎么做的,经过了一系列的百度,找到了个人认为比较实用的几份参考。
附上大佬的链接(毕竟咱是根据人家的东西修改得到的,抄袭不是好孩子):
Tensorflow将自己的数据分割成batch训练:https://blog.csdn.net/sinat_35821976/article/details/82668555
TensorFlow走过的坑之---数据读取和tf中batch的使用方法:https://www.cnblogs.com/marsggbo/p/10040740.html
不过我用的办法是第一篇博客里面的,主要就是两个函数:
作用:作用是从输入的tensor_list按要求抽取一个tensor放入文件名队列
tf.slice_input_producer(tensor_list, num_epochs=None, shuffle=True, seed=None,
capacity=32, shared_name=None, name=None)
参数说明:
tensor_list:你自己的输入,格式为tensor的列表;注:[你的数据名字],亲测你要是不加括号会出现bug
num_epohs:设置你想要的训练次数。如果没有给定值,那么将会抽取无数次batch(这会导致你训练过程停不下来),如果给定值,那么在到达次数之后就会报OutOfRange的错误
shuffle:设置是否随机。如果为False,batch是按顺序抽取;如果为True,batch是随机抽取
seed:随机种子
capcity:队列容量的大小,为整数(没闹明白这个是怎么回事)
name:名称(可以不写)
作用:给你用上一个函数取出来的数据做一个tensor
tf.train.batch([data, label], batch_size=batch_size, capacity=capacity,num_threads=num_thread,allow_smaller_final_batch= True)
tf.train.shuffle_batch([example, label], batch_size=batch_size, capacity=capacity,num_threads=num_thread,allow_smaller_final_batch=True)
参数介绍:
[data,label]:上一个函数的名字
batch_size:batch的大小
capcity:队列的容量(一个队列里允许的最大容量,为整数)
num_threads:线程数,使用多少个线程来控制整个队列。如果num_threads大于1,则batch操作将是非确定性的,输出的batch可能会乱序
allow_smaller_final_batch:这个是当最后的几个样本不够组成一个batch的时候用的参数,如果为True则会重新组成一个batch
读函数这个事吧,对于学渣来说还是太头疼了。基本上的意思就是如果你想用TensorFlow写自己batch就要用到这两个函数。
def get_Batch(data, batch_size):
#print(data.shape)测试用的,忽略这一行
input_queue = tf.train.slice_input_producer([你自己数据的名字噢], num_epochs=这块一定要改好,小编吃过亏, shuffle=True(随机), capacity=64 )
x_batch = tf.train.batch(input_queue, batch_size=batch_size, num_threads=1, capacity=64, allow_smaller_final_batch=False)
return x_batch
#引用函数就可以了
f = get_Batch(train_data,batch_size)
#f就是你的训练集
不知道还有什么补充的没有,如果想起来会修改的。如果有说错的地方,大家要指出来啊。
今日的文案收工啦!