赞
踩
Dataset是创造input pipeline的最佳实践;
# filename是图片的文件名,label是图片对应的标签
dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))
dataset.shuffle(buffer_size=1000) # 如果数据太多,很难完全打乱
dataset = dataset.map(preprocess)
dataset = dataset.batch(batch_size=1)
iterator = tf.compat.v1.data.make_initializable_iterator(dataset)
batch = iterator.get_next()
注意:Cannot create a tensor proto whose content is larger than 2GB.
从结果很明显可以看出,是一次放入tensor的张量不能超过2G,可是实际中有很多数据集是超过2GB的,所以要么进行一个切分操作:目的是实现将超过2GB的切分到每个小块不超过2G,然后再一个一个处理就行了。最好的方式还是放入文件名,再遍历读取。
TensorFlow的Session对象是支持多线程的,可以在同一个会话(Session)中创建多个线程,并行执行。为了充分的利用时间,减少GPU等待的空闲时间,使用了两个线程(文件名队列和内存队列)分别执行数据读入和数据计算。文件名队列源源不断的将硬盘中的图片数据,内存队列负责给GPU送数据,所需数据直接从内存队列中获取。两个线程之间互不干扰,同时运行。
tf.Coordinator和 tf.QueueRunner,这两个类往往一起使用。
# slice_input_producer 可以生成多维队列(Expected list)
# string_input_producer会产生一个文件名队列(Expected string and list)
filename_queue = tf.train.string_input_producer(filename, shuffle=False, num_epochs=1)
fn_que, fn1_que, lb_que, lb1_que = tf.train.string_input_producer([filename,filename1,label1,label2], shuffle=False, num_epochs=1)
# reader从文件名队列中读数据。对应的方法是reader.read
reader = tf.WholeFileReader()
key, value = reader.read(queue)
# 解码
image = tf.image.decode_jpeg(value)
# resize
image_resize = tf.image.resize_images(image, [200, 200])
# reshape
image_resize.set_shape([200, 200, 3])
# input_queue可以由解压后的图片和标签构成,输入要是tensor.
fn_batch, fn1_batch, lb_batch, lb2_batch = tf.train.batch([fn_image,fn1_image, lb_que, lb1_que],batch_size=64,num_threads=1, capacity=64)
with tf.Session() as sess: # 先执行初始化工作 sess.run(tf.global_variables_initializer()) sess.run(tf.local_variables_initializer()) # 必要!! # 开启一个协调器 coord = tf.train.Coordinator() # 使用start_queue_runners 启动队列填充 threads = tf.train.start_queue_runners(sess, coord) try: while not coord.should_stop(): print('************') except tf.errors.OutOfRangeError: # 如果读取到文件队列末尾会抛出此异常 print("done! now lets kill all the threads……") finally: # 协调器coord发出所有线程终止信号 coord.request_stop() # all threads are asked to stop! coord.join(threads) # 把开启的线程加入主线程,等待threads结束
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。