У меня есть сеть с тензором в стиле 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.) В настоящее время мой билинейный код размера выглядит так:
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'
Есть ли способ разрешить изменение размеров изображений для входных зависимых размеров? Или мне нужно построить совершенно новый график для каждого размера входного изображения?
tf.shape
этого используйте tf.shape
:
def unpool2xBilinear(inputs, name = 'unpool2xBilinear'):
sh = tf.shape(inputs)
newShape = 2 * sh[1:3]
return tf.image.resize_bilinear(inputs, newShape)