张量流中的输入管道出错了

时间:2017-08-31 14:58:36

标签: tensorflow

我正在尝试获得一批64张图像,每张图像都有[64,224,224,3]尺寸和标签[64]。有8126 _img_class _img_names 。但是,我得到了意想不到的输出。基本上,我什么都没有,脚本永远不会终止我运行它。

def _get_images(shuffle=True):

"""Gets the images and labels as a batch"""

     #get image and label list
     _img_names,_img_class = _get_list()
     filename_queue = tf.train.string_input_producer(_img_names)

     #reader
     image_reader = tf.WholeFileReader()
     _, image_file = image_reader.read(filename_queue)

     #decode jpeg
     image_original = tf.image.decode_jpeg(image_file)
     label_original = tf.convert_to_tensor(_img_class,dtype=tf.int32)

     #image preprocessing
     image = tf.image.resize_images(image_original, [224,224])
     float_image = tf.cast(image,dtype=tf.float32)
     float_image = tf.image.per_image_standardization(image)

     #set the shape
     float_image.set_shape((224, 224, 3))
     label_original.set_shape([8126])

     #parameters for shuffle
     batch_size = 64
     num_preprocess_threads = 16
     num_examples_per_epoch = 8000
     min_fraction_of_examples_in_queue = 0.4
     min_queue_examples = int(num_examples_per_epoch *
                       min_fraction_of_examples_in_queue)
     if shuffle:
         images_batch, label_batch = tf.train.shuffle_batch(
                      [float_image,label_original],
                      batch_size=batch_size,
                      num_threads=num_preprocess_threads,
                      capacity=min_queue_examples + 3 *                               
                                               batch_size,
                      min_after_dequeue=min_queue_examples)
    else:
         images_batch, label_batch = tf.train.batch(
                      [float_image,label_original],
                      batch_size=batch_size,
                      num_threads=num_preprocess_threads,
                      capacity=min_queue_examples + 3 * batch_size)

    return images_batch,label_batch

with tf.Session() as sess:

     tf.global_variables_initializer().run()

     # Coordinate the loading of image files.
     coord = tf.train.Coordinator()
     threads = tf.train.start_queue_runners(coord=coord)

     images,labels = _get_images(shuffle=True)

     # Get an image tensor and print its value.
     image_tensor,labels = sess.run([images,labels])

     # Finish off the filename queue coordinator.
     coord.request_stop()
     coord.join(threads)

当我设置 enqueue_many = True 时,我收到以下错误。

TypeError: 'Tensor' object is not iterable.

1 个答案:

答案 0 :(得分:1)

您需要在调用queue_runners函数后启动_get_images。由于queue在该函数中定义。

 ...
 images,labels = _get_images(shuffle=True)
 tf.global_variables_initializer().run()
 tf.local_variables_initializer().run()
 # Coordinate the loading of image files.
 coord = tf.train.Coordinator()
 threads = tf.train.start_queue_runners(coord=coord)
 image_tensor,labels = sess.run([images,labels])