我有一个tensorflow UNet风格的网络。目前,我将输入图像和目标图像指定如下:
self.inputTensors = tf.placeholder(tf.float32, [None, opt.inputHeight, opt.inputWidth, opt.inputChannels], name='inputTensors')
self.targetColors = tf.placeholder(tf.float32, [None, opt.inputHeight, opt.inputWidth, opt.outputChannels], name='targetColors')
但是我希望它也能够在可变宽度和高度的图像上进行操作,即
self.inputTensors = tf.placeholder(tf.float32, [None, None, None, opt.inputChannels], name='inputTensors')
self.targetColors = tf.placeholder(tf.float32, [None, None, None, opt.outputChannels], name='targetColors')
并推断中间层的宽度和高度。这对于我的池化层或跨步卷积层工作正常,但对于上采样层,我正在使用tf.image.resize_bilinear(尽管问题对于tf.image.resize_images均有效。)目前,我的调整大小双线性代码如下:< / p>
def unpool2xBilinear(inputs, name = 'unpool2xBilinear'):
sh = inputs.get_shape().as_list()
newShape = (sh[1] * 2, sh[2] * 2)
return tf.image.resize_bilinear(inputs, newShape)
但是,这不能处理未知的输入形状,给
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
是否有一种方法可以允许调整大小的图像接受与输入有关的尺寸?还是我必须为每个不同的输入图像尺寸构建一个全新的图形?
答案 0 :(得分:1)
改为使用tf.shape
:
def unpool2xBilinear(inputs, name = 'unpool2xBilinear'):
sh = tf.shape(inputs)
newShape = 2 * sh[1:3]
return tf.image.resize_bilinear(inputs, newShape)