2015-12-03 1 views
2

У меня есть файл CSV, содержащий пары имен файлов изображений и ярлыка. Я хотел бы загрузить эти изображения.Инициализировать производителя строки из CSV

# Queue for reading input pairs 
filename_queue = tf.train.string_input_producer([MY_CSV_FILE]) 

# Read CSV input pairs and label 
pair_list_reader = tf.TextLineReader() 
pair_list_key, pair_list_value = pair_list_reader.read(filename_queue) 
record_defaults = [[''], [''], [-1]] 
img1_path, img2_path, label = tf.decode_csv(pair_list_value, record_defaults=record_defaults) 

# Load image 1 
img1_filename_queue = tf.train.string_input_producer(img1_path) 

Как вы можете видеть, я прочитал в файл CSV строка за строкой, а затем попытаться инициализировать второй производитель ввода, используя имя файла, я получаю от декодера CSV.

Я получаю ошибку в последней строке, хотя:

File "tensorflow/python/training/input.py", line 138, in string_input_producer 
    "fraction_of_%d_full" % capacity) 
    File "tensorflow/python/training/input.py", line 106, in _input_producer 
    enq = q.enqueue_many([input_tensor]) 
    File "tensorflow/python/ops/data_flow_ops.py", line 192, in enqueue_many 
    batch_dim = ret.inputs[1].get_shape()[0] 
    File "tensorflow/python/framework/tensor_shape.py", line 427, in __getitem__ 
    return self._dims[key] 
IndexError: list index out of range 

Почему?

Заранее спасибо.

ответ

1

Это ошибка из-за несовместимости форм из img1_path (0-D, или скаляр, Тензорный) и ожидаемый string_tensor аргумент tf.train.string_input_producer (1-D, или вектора, Тензорный).

К счастью, решение очень простое, используя tf.expand_dims для преобразования img1_path к (один элемент) вектора:

# Convert img1_path from a scalar to a 1-element vector. 
img1_path = tf.expand_dims(img1_path, 0) 

Отслеживание форм тензоров может быть сложно, поэтому TensorFlow предоставляет метод Tensor.get_shape(), который вы можете вызвать, чтобы получить информацию о форме любого тензорного объекта. Например:

print img1_path.get_shape() 
# ==> "TensorShape([])" (a 0-dimensional tensor, or scalar) 
img1_path = tf.expand_dims(img1_path, 0) 
print img1_path.get_shape() 
# ==> "TensorShape([Dimension(1)])" (a 1-dimensional tensor with length 1) 
+0

Большое спасибо. Как узнать размерность тензора? – Pfaeff

+0

Я обновил ответ, чтобы показать, как использовать метод 'Tensor.get_shape()'. – mrry

+0

Отлично. Большое спасибо. – Pfaeff