Ich versuche, eine Charge von 64 Bildern zu bekommen, jeder hat [64,224,224,3] Abmessungen und Beschriftungen haben [64]. Es gibt 8126 _img_class und _img_name. Ich bekomme jedoch eine unerwartete Ausgabe. Im Grunde genommen bekomme ich nichts und das Skript endet nie, wenn ich es ausführe.Etwas ging schief mit der Eingabe-Pipeline in Tensorflow
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)
Als ich enqueue_many = Ich erhalte die folgenden Fehler Wahr gesetzt.
TypeError: 'Tensor' object is not iterable.
Danke. Ich habe die Ausgabe, aber meine Etiketten sind in der Dimension (64,8126) und sie werden nicht gemischt. Das ist ziemlich komisch, da ich seine Form bereits auf [8126] eingestellt habe. Ich würde mich freuen, wenn Sie etwas Licht darauf werfen könnten. Danke an –
Das Problem liegt an dieser Zeile 'label_original.set_shape ([8126])'. Da label hier ein int ist, können Sie die Form als 'label_original.set_shape ([1])' setzen, um es zum 1D-Tensor zu machen. Oder Sie können die Form nicht einstellen. –
Ich habe beide Wege ausprobiert, aber beide sind gescheitert. Es wird ein Fehler der Nichtübereinstimmungsgröße angezeigt. Ich verstehe den Fehler irgendwie. Für jedes Bild werden 8126 Elemente als Label betrachtet. –