TensorFlow的Queue
例1
# -*-coding:utf-8 -*-
import tensorflow as tf
import tensorflow as tf
import numpy as np
def generate_data():
num = 25
label = np.asarray(range(0, num))
images = np.random.random([num, 5, 5, 3])
print('label size :{}, image size {}'.format(label.shape, images.shape))
return label, images
def get_batch_data():
label, images = generate_data()
images = tf.cast(images, tf.float32)
label = tf.cast(label, tf.int32)
input_queue = tf.train.slice_input_producer([images, label], shuffle=False) # 默认 shuffle=True
image_batch, label_batch = tf.train.batch(input_queue, batch_size=8, num_threads=1, capacity=64)
return image_batch, label_batch
image_batch, label_batch = get_batch_data()
with tf.Session() as sess:
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess, coord)
i = 0
try:
while not coord.should_stop():
image_batch_v, label_batch_v = sess.run([image_batch, label_batch])
i += 1
if i == 3:
coord.request_stop()
for j in range(8):
print(image_batch_v.shape, label_batch_v[j])
except tf.errors.OutOfRangeError:
print("done")
finally:
coord.request_stop()
coord.join(threads)
例2
import tensorflow as tf
from tensorflow.python.ops import data_flow_ops
image_paths_placeholder = tf.placeholder(tf.string,shape=(None,3),name='image_paths')
labels_placeholder = tf.placeholder(tf.int32,shape=(None,3),name='labels')
input_queue = data_flow_ops.FIFOQueue(capacity=3,dtypes=[tf.string,tf.int32],shapes=[(3,),(3,)],shared_name=None,name=None)
enqueue_op = input_queue.enqueue_many([image_paths_placeholder,labels_placeholder])
init = tf.global_variables_initializer()
X = [["1", "1", "1"], ["2", "2", "2"], ["3", "3", "3"]]
Y = [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
with tf.Session() as sess:
enqueue_op.run(feed_dict={image_paths_placeholder:X,labels_placeholder:Y})
for i in range(3):
print(sess.run([input_queue.dequeue()]))