我有一个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
为什么?
提前谢谢。
答案 0 :(得分:1)
由于img1_path
(0-D或标量,Tensor)的不兼容形状以及tf.train.string_input_producer
的预期string_tensor
参数,这是一个错误(1-D,或矢量,Tensor)。
幸运的是,解决方案很简单,使用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)