Линейная интерполяция в Керасе - PullRequest
1 голос
/ 14 октября 2019

Как добавить слой линейной интерполяции в Керас?

У меня есть сеть песочных часов («channel_first»), и в какой-то момент в части декодера я должен выполнить линейную интерполяцию от размера (32,128,152) до (32,128,256) после моего реляционного слоя.

Я пробовал conv2DTranspose и Upsampling2D, ни один из которых не допускает частичного повышения частоты дискретизации. Reshape и Imageresize также не работали. (мой ввод - это не изображение, это матрица необработанных данных размером 64 * 2462)

1 Ответ

1 голос
/ 14 октября 2019

Вы можете использовать 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 в качестве первого слоя модели. Но это личное предпочтение, конечно.

...