为什么在Tensorflow中转换图像时会出现ValueError(' \' image \'必须完全定义。')?

时间:2016-01-12 14:51:13

标签: tensorflow

我想通过在tensorflow中链接不同的图像变换操作符来进行实时数据增加。我的代码从图像解码开始,然后运行不同的转换,但它会抛出ValueError('\'image\' must be fully defined.')。以下是重现此错误的示例:

def decode_and_augment(image_raw):
  decoded = tf.image.decode_jpeg(image_raw)
  flipped = tf.image.random_flip_left_right(decoded)
  return flipped

1 个答案:

答案 0 :(得分:11)

出现此错误是因为tf.image.random_flip_left_right() op在构建图形时检查其输入的静态形状,而tf.image.decode_jpeg()生成的张量对image_raw的内容具有数据依赖性,因此它的形状不是静态的。目前解决此问题的唯一方法是使用Tensor.set_shape()设置decoded张量的静态形状,如下所示:

decoded = tf.image.decode_jpeg(image_raw)
decoded.set_shape([IMAGE_HEIGHT, IMAGE_WIDTH, NUM_CHANNELS])
flipped = tf.image.random_flip_left_right(decoded)

这样做的缺点是所有图像现在必须具有相同的大小(和通道数)。

许多图像操作不像TensorFlow的其余部分那样遵循相同的渐变和动态形状推断(它允许您具有未知的形状或尺寸,假设程序在构建图形时是正确的,并检查在运行时的真实形状)。目前这是considered a bug,我们将找到解决问题的方法。