【发布时间】:2018-10-15 14:58:14
【问题描述】:
我想在我的输入管道中随机翻转几个不同大小的输入图像。
对于不同的图像,翻转需要保持一致——要么全部翻转,要么不翻转。
由于使用 tf.image.random_flip_left_right() 不足以解决此问题,我改为这样做:
images = [img1, img2]
def fliplr(*args):
return [tf.image.flip_left_right(t) for t in args]
def id(*args):
return args
img1, img2 = tf.cond(tf.random_uniform([1]) > 0.5, fliplr(images), id(images), name='fliplr')
这是tf.Dataset.map() 使用我的输入数据集对象调用的函数的一部分。
但是我从flip_left_right 行收到此错误:
ValueError: 两个形状的维度 1 必须相等,但是是 3 和 1。 形状为 [240,320,3] 和 [240,320,1]。
从将形状 0 与其他形状合并。对于具有输入形状的“flip_left_right/image”(操作:“Pack”):[240,320,3]、[240,320,1]。
我认为这是因为我的图像尺寸不同(240x320,1 个或 3 个通道),但我不明白这有什么关系。
如何解决此错误?或者,是否有更好的方法来避免此错误?
我使用的是 TensorFlow-1.8(但如果需要可以升级)。
【问题讨论】:
-
我错过了
tf.random_uniform()以空形状调用以使其成为标量的事实。这样,那里的解决方案(也由 Albert 在这里发布)对我有用。我将对此进行验证并标记为重复。 -
虽然请注意那里给出的第二个解决方案在这里不起作用并给出类似的错误。
标签: python tensorflow