У меня проблемы с настройкой tf.nn.conv2d_transpose
для правильной работы.Вот небольшое воспроизведение того, что я пытаюсь сделать:
import tensorflow as tf
import numpy as np
# Shape (2, 3, 3, 1) == (batch_sz, height, width, channels)
inp = tf.Variable(np.array(
[
[
[[1], [2], [3]],
[[2], [3], [4]],
[[7], [8], [9]]
],
[
[[3], [2], [1]],
[[2], [7], [2]],
[[3], [2], [0]]
]
], dtype = np.float32
))
# Shape (5, 5, 3, 1) == (kH, kW, out_channels, in_channels)
ker = tf.Variable(np.array(
[
[[[1],[2],[1]], [[2],[2],[2]], [[1],[2],[1]], [[2],[1],[1]], [[1],[1],[1]]],
[[[1],[2],[1]], [[2],[2],[2]], [[1],[2],[1]], [[2],[1],[1]], [[1],[1],[1]]],
[[[1],[2],[1]], [[2],[2],[2]], [[1],[2],[1]], [[2],[1],[1]], [[1],[1],[1]]],
[[[1],[2],[1]], [[2],[2],[2]], [[1],[2],[1]], [[2],[1],[1]], [[1],[1],[1]]],
[[[1],[2],[1]], [[2],[2],[2]], [[1],[2],[1]], [[2],[1],[1]], [[1],[1],[1]]]
], dtype = np.float32
))
out = tf.nn.conv2d_transpose(inp, ker, (2, 7, 7, 1), (1, 1, 1, 1), padding='SAME', data_format='NHWC', name='conv_transpose')
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
output, kernel, input = sess.run([out, ker, inp])
Я хочу выполнить транспонированную свертку на входе 3x3x1, используя три фильтра 5x5x1.Я ожидаю, что выходные данные будут иметь форму 7x7x3 - но вместо этого я получаю сообщение об ошибке:
InvalidArgumentError: Conv2DCustomBackpropInput: input and filter must have the same depth
[[Node: conv_transpose_2 = Conv2DBackpropInput[T=DT_FLOAT, data_format="NHWC", dilations=[1, 1, 1, 1], padding="SAME", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true, _device="/job:localhost/replica:0/task:0/device:CPU:0"](conv_transpose_2/output_shape, Variable_21/read, Variable_20/read)]]
Разве вход и глубина фильтра не равны 1?Я не понимаю, что я делаю неправильно - любые намеки были бы очень благодарны.Я специально хочу использовать tf.nn.conv2d_transpose
, а не tf.layers.conv2d_transpose
.