Je lis un lot d'images en me faisant une idée ici de tfrecords (converti par this )
Mes images sont des images cifar, [32, 32, 3] et comme vous pouvez le voir en lisant et en passant des images, les formes sont normales (batch_size=100
)
les 2 problèmes les plus notables mentionnés dans le journal, pour autant que je sache,
Compute status: Out of range: RandomSuffleQueue '_2_input/shuffle_batch/random_shuffle_queue' is closed and has insufficient elements (requested 100, current size 0)
Comment puis-je résoudre ça?
Journaux:
1- image shape is TensorShape([Dimension(3072)])
1.1- images batch shape is TensorShape([Dimension(100), Dimension(3072)])
2- images shape is TensorShape([Dimension(100), Dimension(3072)])
W tensorflow/core/kernels/queue_ops.cc:79] Invalid argument: Shape mismatch in Tuple component 0. Expected [3072], got [12288]
W tensorflow/core/common_runtime/executor.cc:1027] 0x7fa72abc89a0 Compute status: Invalid argument: Shape mismatch in Tuple component 0. Expected [3072], got [12288]
[[Node: input/shuffle_batch/random_shuffle_queue_enqueue = QueueEnqueue[Tcomponents=[DT_FLOAT, DT_INT32], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](input/shuffle_batch/random_shuffle_queue, input/sub, input/Cast_1)]]
W tensorflow/core/kernels/queue_ops.cc:79] Invalid argument: Shape mismatch in Tuple component 0. Expected [3072], got [12288]
W tensorflow/core/common_runtime/executor.cc:1027] 0x7fa72ab9d080 Compute status: Invalid argument: Shape mismatch in Tuple component 0. Expected [3072], got [12288]
[[Node: input/shuffle_batch/random_shuffle_queue_enqueue = QueueEnqueue[Tcomponents=[DT_FLOAT, DT_INT32], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](input/shuffle_batch/random_shuffle_queue, input/sub, input/Cast_1)]]
W tensorflow/core/kernels/queue_ops.cc:79] Invalid argument: Shape mismatch in Tuple component 0. Expected [3072], got [12288]
W tensorflow/core/common_runtime/executor.cc:1027] 0x7fa7285e55a0 Compute status: Invalid argument: Shape mismatch in Tuple component 0. Expected [3072], got [12288]
[[Node: input/shuffle_batch/random_shuffle_queue_enqueue = QueueEnqueue[Tcomponents=[DT_FLOAT, DT_INT32], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](input/shuffle_batch/random_shuffle_queue, input/sub, input/Cast_1)]]
W tensorflow/core/kernels/queue_ops.cc:79] Invalid argument: Shape mismatch in Tuple component 0. Expected [3072], got [12288]
W tensorflow/core/common_runtime/executor.cc:1027] 0x7fa72aadb080 Compute status: Invalid argument: Shape mismatch in Tuple component 0. Expected [3072], got [12288]
[[Node: input/shuffle_batch/random_shuffle_queue_enqueue = QueueEnqueue[Tcomponents=[DT_FLOAT, DT_INT32], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](input/shuffle_batch/random_shuffle_queue, input/sub, input/Cast_1)]]
W tensorflow/core/common_runtime/executor.cc:1027] 0x7fa72ad499a0 Compute status: Out of range: RandomSuffleQueue '_2_input/shuffle_batch/random_shuffle_queue' is closed and has insufficient elements (requested 100, current size 0)
[[Node: input/shuffle_batch = QueueDequeueMany[component_types=[DT_FLOAT, DT_INT32], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](input/shuffle_batch/random_shuffle_queue, input/shuffle_batch/n)]]
Traceback (most recent call last):
File "/Users/HANEL/Documents/my_cifar_train.py", line 110, in <module>
tf.app.run()
File "/Users/HANEL/tensorflow/lib/python2.7/site-packages/tensorflow/python/platform/default/_app.py", line 11, in run
sys.exit(main(sys.argv))
File "/Users/HANEL/my_cifar_train.py", line 107, in main
train()
File "/Users/HANEL/my_cifar_train.py", line 76, in train
_, loss_value = sess.run([train_op, loss])
File "/Users/HANEL/tensorflow/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 345, in run
results = self._do_run(target_list, unique_fetch_targets, feed_dict_string)
File "/Users/HANEL/tensorflow/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 419, in _do_run
e.code)
tensorflow.python.framework.errors.OutOfRangeError: RandomSuffleQueue '_2_input/shuffle_batch/random_shuffle_queue' is closed and has insufficient elements (requested 100, current size 0)
[[Node: input/shuffle_batch = QueueDequeueMany[component_types=[DT_FLOAT, DT_INT32], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](input/shuffle_batch/random_shuffle_queue, input/shuffle_batch/n)]]
Caused by op u'input/shuffle_batch', defined at:
File "/Users/HANEL/my_cifar_train.py", line 110, in <module>
tf.app.run()
File "/Users/HANEL/tensorflow/lib/python2.7/site-packages/tensorflow/python/platform/default/_app.py", line 11, in run
sys.exit(main(sys.argv))
File "/Users/HANEL/my_cifar_train.py", line 107, in main
train()
File "/Users/HANEL/my_cifar_train.py", line 39, in train
images, labels = my_input.inputs()
File "/Users/HANEL/my_input.py", line 157, in inputs
min_after_dequeue=200)
File "/Users/HANEL/tensorflow/lib/python2.7/site-packages/tensorflow/python/training/input.py", line 453, in shuffle_batch
return queue.dequeue_many(batch_size, name=name)
File "/Users/HANEL/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/data_flow_ops.py", line 245, in dequeue_many
self._queue_ref, n, self._dtypes, name=name)
File "/Users/HANEL/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/gen_data_flow_ops.py", line 319, in _queue_dequeue_many
timeout_ms=timeout_ms, name=name)
File "/Users/HANEL/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/op_def_library.py", line 633, in apply_op
op_def=op_def)
File "/Users
/HANEL/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1710, in create_op
original_op=self._default_original_op, op_def=op_def)
File "/Users/HANEL/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 988, in __init__
self._traceback =
_extract_stack()
J'avais un problème similaire. En fouillant sur le Web, il s’est avéré que si vous utilisiez un argument num_epochs
, vous deviez initialiser toutes les variables local
, votre code devrait donc ressembler à ceci:
with tf.Session() as sess:
sess.run(tf.local_variables_initializer())
sess.run(tf.global_variables_initializer())
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
# do your stuff here
coord.request_stop()
coord.join(threads)
Si vous postez un peu plus de code, je pourrais peut-être examiner de plus près. En attendant, HTH.
Vous êtes probablement en train de mal traiter l'exemple TFRecord analysé. Par exemple. essayer de remodeler un tenseur à une taille incompatible. Vous pouvez déboguer en utilisant un tf_record_iterator pour confirmer que les données que vous lisez sont stockées comme vous le pensez:
import tensorflow as tf
import numpy as np
tfrecords_filename = '/path/to/some.tfrecord'
record_iterator = tf.python_io.tf_record_iterator(path=tfrecords_filename)
for string_record in record_iterator:
# Parse the next example
example = tf.train.Example()
example.ParseFromString(string_record)
# Get the features you stored (change to match your tfrecord writing code)
height = int(example.features.feature['height']
.int64_list
.value[0])
width = int(example.features.feature['width']
.int64_list
.value[0])
img_string = (example.features.feature['image_raw']
.bytes_list
.value[0])
# Convert to a numpy array (change dtype to the datatype you stored)
img_1d = np.fromstring(img_string, dtype=np.float32)
# Print the image shape; does it match your expectations?
print(img_1d.shape)
J'ai eu exactement le même problème aujourd'hui et plus tard, j'ai découvert que c'était le fichier de données d'entrée que j'avais téléchargé à partir d'un "ensemble de données célèbre" (tel que https://archive.ics.uci.edu/ml/machine-learning-databases/ iris/iris.data ) qui a provoqué l'erreur: Il contient des lignes vides à la fin du fichier. Supprimez les lignes vides, l'erreur était partie!
Pour résumer les commentaires, le
Compute status: Out of range: RandomSuffleQueue '_2_input/shuffle_batch/random_shuffle_queue' is closed and has insufficient elements (requested 100, current size 0)
a été causée par le manque de données dans la file d'attente. Cela est souvent dû au fait que vous pensez avoir suffisamment de données pour N itérations, alors que vous en avez en réalité assez pour M itérations où M <N.
Une suggestion pour déterminer la quantité de données dont vous disposez réellement consiste à compter le nombre de fois où vous pouvez lire des données avant qu'une exception OutOfRangeError ne soit renvoyée par la file d'attente.
Cela pourrait également être dû à un nom de fichier d'enregistrement incorrect qui n'existe pas du tout. Assurez-vous que les chemins de fichier corrects sont spécifiés avant d'effectuer d'autres vérifications.
J'ai eu le même problème et aucune des réponses précédentes n'a semblé la résoudre alors je vais aussi en parler.
Pour moi, le problème était la liste des fonctionnalités que je passais à parse_single_example. Pour une raison quelconque (depuis que j'utilise une float_list?) Dans mon fichier tfrecords, je devais spécifier la longueur du tableau dans ma liste de fonctionnalités ou utiliser tf.VarLenFeature, à savoir:
feature_structure = {'features': tf.FixedLenFeature([FEATURE_SIZE], tf.float32),
'outputs': tf.FixedLenFeature([OUTPUT_SIZE], tf.float32)}
d_features = tf.parse_single_example(serialized_example, features=feature_structure)
Sans cela, je continuais à avoir l'erreur "random_shuffle_queue est fermée et ne contient pas suffisamment d'éléments", ce qui, je suppose, est due au fait que mon exemple analysé ne contenait aucune donnée.