Как понять conv2d_transpose в тензорном потоке - PullRequest
2 голосов
/ 26 января 2020

Ниже приведен тест для conv2d_transpose.

import tensorflow as tf
import numpy as np
x = tf.constant(np.array([[
    [[-67], [-77]], 
    [[-117], [-127]]
]]), tf.float32)

# shape = (3, 3, 1, 1) -> (height, width, input_channels, output_channels) - 3x3x1 filter
f = tf.constant(np.array([
    [[[-1]], [[2]], [[-3]]], 
    [[[4]], [[-5]], [[6]]], 
    [[[-7]], [[8]], [[-9]]]
]), tf.float32)

conv = tf.nn.conv2d_transpose(x, f, output_shape=(1, 5, 5, 1), strides=[1, 2, 2, 1], padding='VALID')

Результат:

tf.Tensor(
[[[[   67.]
   [ -134.]
   [  278.]
   [ -154.]
   [  231.]]

  [[ -268.]
   [  335.]
   [ -710.]
   [  385.]
   [ -462.]]

  [[  586.]
   [ -770.]
   [ 1620.]
   [ -870.]
   [ 1074.]]

  [[ -468.]
   [  585.]
   [-1210.]
   [  635.]
   [ -762.]]

  [[  819.]
   [ -936.]
   [ 1942.]
   [-1016.]
   [ 1143.]]]], shape=(1, 5, 5, 1), dtype=float32)  

Насколько я понимаю, он должен работать, как описано на рис. 4.5 в do c

Следовательно, первый элемент (conv [0,0,0,0]) должен быть -67 * -9 = 603. Почему получается 67?

Результат может быть представлен следующим образом: enter image description here. Но почему ядро ​​свертки перевернуто?

1 Ответ

2 голосов
/ 26 января 2020

Чтобы объяснить лучше, я сделал цифру draw.io, чтобы объяснить полученные вами результаты. enter image description here

Полагаю, что приведенная выше иллюстрация может помочь объяснить причину, по которой первый элемент транспонирования конв. карта возможностей 67.

Ключевое замечание:

  • В отличие от традиционной свертки, в транспонированная свертка каждый элемент фильтра умножается на элемент входной карты объектов и результаты этих отдельных умножений и промежуточных карт объектов накладываются друг на друга для создания окончательной карты объектов. stride определяет, насколько далеко расположены оверлеи. В нашем случае, stepde = 2, следовательно, фильтр перемещается на 2 в обоих измерениях x и y после каждой свертки с исходной картой объектов с пониженной дискретизацией.
...