Как использовать тензор потока для данных с несколькими метками?

У меня есть большая база изображений с соответствующими им ярлыками. Я хочу использовать 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].

Если для каждого элемента имени файла поставить одинаковое количество меток, это работает, так как я могу это сделать?

0 ответов

Другие вопросы по тегам