Вы можете использовать tf.image.resize
, так как это интерполяция 2D данных. Возможны несколько видов интерполяции, включая «билинейную», «бикубическую» и т. Д .: https://www.tensorflow.org/api_docs/python/tf/image/resize
Чтобы обойти проблему каналов в первую очередь, вы можете просто изменить порядок измерений:
model.add(Permute((2,3,1))) #brings the channels to the last position
model.add(Lambda(lambda x: tf.image.resize(x, size)))
#if you wish to go back to channels first:
model.add(Permute((3,1,2)))
Если честно, Keras предпочитает использовать последние каналы в своих функциях (оси обычно принимаются равными -1, определенные активации и потери идут для оси -1 и т. Д.)
Я бы использовал каналы в последнюю очередь, без сомнения. Даже если я сначала сохраню каналы данных, но добавлю Permute
в качестве первого слоя модели. Но это личное предпочтение, конечно.