входные каналы не соответствуют входным каналам фильтра (Tensorflow) - PullRequest
0 голосов
/ 19 мая 2018

Я хотел бы использовать tf.nn.conv2d_transpose для создания слоя деконволюции для сети GAN.

Я хотел бы создать функцию deconv_layer.Он генерирует новый слой, который выводит filter_num фильтров с expand_size кратным разрешением ввода.

Мой код:

def deconv_layer(x, filter_num, kernel_size=5, expand_size=2):

    x_shape = x.get_shape().as_list()

    with tf.name_scope('deconv_'+str(filter_num)):

        size_in = x_shape[-1]
        size_out = filter_num

        w = tf.Variable(tf.random_normal([kernel_size, kernel_size, size_in, size_out], mean=0.0, stddev=0.125), name="W")
        b = tf.Variable(tf.random_normal([size_out], mean=0.0, stddev=0.125), name="B")

        conv = tf.nn.conv2d_transpose(x, w, output_shape=[-1, x_shape[-3]*expand_size, x_shape[-2]*expand_size, filter_num], strides=[1,expand_size,expand_size,1], padding="SAME")
        act = tf.nn.relu(tf.nn.bias_add(conv, b))

        tf.summary.histogram('weights', w)
        tf.summary.histogram('biases', b)
        tf.summary.histogram('activations', act)

    return act

Сообщение об ошибке:

ValueError: input channels does not match filter's input channels
At conv = tf.nn.conv2d_transpose(...)

Я не уверен, правильно ли я использую tf.nn.conv2d_transpose.Я пытался создать его на основе сверточного слоя.

1 Ответ

0 голосов
/ 19 мая 2018

Неверный размер фильтра.Согласно фильтру docs :

: тензор 4-D с тем же типом, что и значение и форма [высота, ширина, output_channels, in_channels].Размер фильтра in_channels должен соответствовать значению (входному).

Вам необходимо изменить размер w на:

w = tf.Variable(tf.random_normal([kernel_size, kernel_size, size_out, size_in], mean=0.0, stddev=0.125), name="W")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...