我想通过在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
答案 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,我们将找到解决问题的方法。