从CSV初始化字符串生成器

时间:2015-12-03 20:49:26

标签: python tensorflow

我有一个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 个答案:

答案 0 :(得分:1)

由于img1_path(0-D或标量,Tensor)的不兼容形状以及tf.train.string_input_producer的预期string_tensor参数,这是一个错误(1-D,或矢量,Tensor)。

幸运的是,解决方案很简单,使用tf.expand_dimsimg1_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)