Как использовать тензор потока для данных с несколькими метками?
У меня есть большая база изображений с соответствующими им ярлыками. Я хочу использовать CNN для его классификации, но моя проблема заключается в методе входного конвейера, использующего Tensorflow. Поскольку база данных слишком велика, я должен использовать очередь.
Формат моих данных - текстовый файл, приведенный ниже:
my_data.txt:
filename1, label1, label2, label3
filename2, label4, label5
filename3, label2, label6, label7, label8
...
Я анализирую его для использования в списке Python, как это:my_data = [[filename1, filename3, filename3, ...], [[label1, label2, label3], [label4, label5], [label2, label6, label7, label8], ...] ]
Я хочу поместить это в очередь и удалить из очереди элемент имени файла с его соответствующими метками
Что я пробовал:
import tensorflow as tf
queue = tf.train.slice_input_producer(my_data, capacity=100, shuffle=True)
filename = queue[0]
labels = queue[1:]
file_content = tf.read_file(filename)
record = tf.image.decode_png(file_content, channels=3)
image = preprocess(record) # to put shape at a regular value
data_batch = tf.train.batch([image, labels])
init = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
with tf.Session() as sess :
sess.run(init)
coord =tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord, sess=sess)
png_images, labels= sess.run(data_batch)
Traceback (most recent call last):
File "test_queue.py", line 19, in <module>
shuffle=True)
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/input.py", line 298, in slice_input_producer
tensor_list = ops.convert_n_to_tensor_or_indexed_slices(tensor_list)
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py", line 925, in convert_n_to_tensor_or_indexed_slices
values=values, dtype=dtype, name=name, as_ref=False)
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py", line 896, in internal_convert_n_to_tensor_or_indexed_slices
value, dtype=dtype, name=n, as_ref=as_ref))
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py", line 857, in internal_convert_to_tensor_or_indexed_slices
as_ref=as_ref)
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py", line 702, in internal_convert_to_tensor
ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/constant_op.py", line 111, in _constant_tensor_conversion_function
return constant(v, dtype=dtype, name=name)
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/constant_op.py", line 100, in constant
tensor_util.make_tensor_proto(value, dtype=dtype, shape=shape, verify_shape=verify_shape))
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/tensor_util.py", line 379, in make_tensor_proto
_GetDenseDimensions(values)))
ValueError: Argument must be a dense tensor: [['label1', 'label2', 'label3'], ['label4', 'label5'], ['label2', 'label6', 'label7', 'label8']] - got shape [3], but wanted [3, 3].
Если для каждого элемента имени файла поставить одинаковое количество меток, это работает, так как я могу это сделать?