Понимание basi c Keras Conv2DПереместить пример - PullRequest
1 голос
/ 21 марта 2020

Это определенно базовый c вопрос, но у меня возникают проблемы с пониманием, что именно происходит с функцией Кераса layers.Conv2DTranspose. У меня есть следующие три строки:

Настройка

model = tf.keras.Sequential()
...
model.add(layers.Reshape((10, 10, 256)))
model.add(layers.Conv2DTranspose(128, (5, 5), strides=(1, 1), padding='same', use_bias=False))
assert model.output_shape == (None, 10, 10, 128)

Первое появление Reshape дает мне тензор формы [10x10x256].

В слое Conv2DTranspose Я как-то скользлю фильтром формы [5x5] вдоль этого тензора и в итоге получаю новый тензор формы [10x10x128].

Graphical depiction of what I think this is doing

Вопрос

Что математически происходит, чтобы получить меня от первого тензора [10x10x256] до второго [10x10x128]?

1 Ответ

1 голос
/ 21 марта 2020

Это почти то же самое, что свертка, но с причудливыми набивками, чтобы создать ощущение обратной свертки.

Скользящее окно на вашей картинке правильно расположено.
Но это не "окно", это фактически "скользящий блок". Размер блока составляет 256 в глубину.

Итак, идет умножение и суммирование всех каналов для каждого шага.

Но тогда есть 128 различных скользящих блоков (как вы определили в вашем слое с filters=128). Каждый из этих 128 скользящих блоков создает отдельный выходной канал.


Великолепные объяснения о транспонированных извилинах: https://datascience.stackexchange.com/questions/6107/what-are-deconvolutional-layers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...