Почему tf.keras.layers.Conv2DTranspose не нуждается в output_shape по сравнению с tf.nn.conv2d_transpose? - PullRequest
1 голос
/ 24 апреля 2019

Мне здесь не хватает чего-то простого.Но я всегда использовал tf.nn API для транспонирования свертки, где я должен указать выходную форму, потому что она неоднозначна ( Link ).Однако для TF 2.0 я переключаюсь на подклассы Keras, и теперь мне интересно, почему мне не нужно указывать форму вывода для транспонирования свертки в API более высокого уровня.Как они это точно вычисляют?

1 Ответ

2 голосов
/ 24 апреля 2019

tf.keras.layers.Conv2DTranpose backends для tf.nn.conv2d_transpose через tf.keras.backend.conv2d_transpose.

Для вычисления аргумента output_shape для tf.nn.conv2d_transpose используется функция deconv_output_length (здесь определено ):

def deconv_output_length(input_length, filter_size, padding, stride):
  """Determines output length of a transposed convolution given input length.
  Arguments:
      input_length: integer.
      filter_size: integer.
      padding: one of "same", "valid", "full".
      stride: integer.
  Returns:
      The output length (integer).
  """
  if input_length is None:
    return None
  input_length *= stride
  if padding == 'valid':
    input_length += max(filter_size - stride, 0)
  elif padding == 'full':
    input_length -= (stride + filter_size - 2)
  return input_length
...