Tensorflow) Conv3DBackpropInput: входные данные и out_backprop должны иметь одинаковый размер пакета

Я пытаюсь представить вариант DCGAN, созданный carpedm20, от 2D-поколения до 3D-поколения (последовательность изображений, часть видео)

После реализации я получил ошибку ниже:

InvalidArgumentError (см. Выше для отслеживания): Conv3DBackpropInput: input и out_backprop должны иметь одинаковый размер пакета [[Node: generator/g_h1/conv3d_transpose = Conv3DBackpropInputV2[T=DT_FLOAT, data_format="NDHWC", 1, [1, [1, [1, 1], дилатации = 1, 1], padding="SAME", strides=[1, 3, 3, 3, 1], _device="/job:localhost/replica:0/task:0/device:GPU:0"](генератор /g_h1/conv3d_transpose/output_shape, генератор /g_h1/w/read, генератор /Relu)]] [[Узел: дискриминатор /Sigmoid/_7 = _Recvclient_terminated=false, recv_device="/job:localhost/replica:0/task:0/ устройство: ЦП:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, тензор_имя ="edge_277_discriminator/Sigmoid", тензор_типа =DT_FLOAT, _device="/ работа: локальный / реплика: 0 / задача: 0 / устройства:CPU:0"]]

Мой метод 'генератора' и метод 'deconv3d' приведены ниже:

def generator(self, z, y=None):
    with tf.variable_scope("generator") as scope:
      if not self.y_dim:
        s_h, s_w = self.output_height, self.output_width
        s_h2, s_w2 = conv_out_size_same(s_h, 2), conv_out_size_same(s_w, 2)
        s_h4, s_w4 = conv_out_size_same(s_h2, 2), conv_out_size_same(s_w2, 2)
        s_h8, s_w8 = conv_out_size_same(s_h4, 2), conv_out_size_same(s_w4, 2)
        s_h16, s_w16 = conv_out_size_same(s_h8, 2), conv_out_size_same(s_w8, 2)

        # project `z` and reshape
        self.z_, self.h0_w, self.h0_b = linear(
            z, self.gf_dim*8*s_h16*s_w16, 'g_h0_lin', with_w=True)

        self.h0 = tf.reshape(
             self.z_, [-1, self.flags.seq_length, s_h16, s_w16, self.gf_dim * 8])
         h0 = tf.nn.relu(self.g_bn0(self.h0))
         print('generator --> h0.shape : %s' % h0.shape)

         self.h1, self.h1_w, self.h1_b = deconv3d(
             h0, [self.batch_size, self.flags.seq_length, s_h8, s_w8, self.gf_dim*4], name='g_h1', with_w=True)
         h1 = tf.nn.relu(self.g_bn1(self.h1))
         print('generator --> h1.shape : %s' % h1.shape)

        h2, self.h2_w, self.h2_b = deconv3d(
            h1, [self.batch_size, self.flags.seq_length, s_h4, s_w4, self.gf_dim*2], name='g_h2', with_w=True)
        h2 = tf.nn.relu(self.g_bn2(h2))
        print('generator --> h2.shape : %s' % h2.shape)

        h3, self.h3_w, self.h3_b = deconv3d(
             h2, [self.batch_size, self.flags.seq_length, s_h2, s_w2, self.gf_dim*1], name='g_h3', with_w=True)
        h3 = tf.nn.relu(self.g_bn3(h3))
        print('generator --> h3.shape : %s' % h3.shape)

        h4, self.h4_w, self.h4_b = deconv3d(
            h3, [self.batch_size, self.flags.seq_length, s_h, s_w, self.c_dim], name='g_h4', with_w=True)
        print('generator --> h4.shape : %s' % h4.shape)

        return tf.nn.tanh(h4)

def deconv3d(input_, output_shape, k_d=5, k_h=5, k_w=5, d_d=3, d_h=-1, d_w=-1, stddev=0.02, name='deconv3d', with_w=False):
    with tf.variable_scope(name):
        d_h, d_w = (d_d, d_d)
        w = tf.get_variable('w', [k_d, k_h, k_w, output_shape[-1], input_.get_shape()[-1]], initializer=tf.random_normal_initializer(stddev=stddev))
        deconv = tf.nn.conv3d_transpose(input_, w, output_shape=output_shape, strides=[1, d_d, d_h, d_w, 1], padding='SAME')

        biases = tf.get_variable('biases', [output_shape[-1]], initializer=tf.constant_initializer(0.0))
        deconv = tf.reshape(tf.nn.bias_add(deconv, biases), deconv.get_shape())
        if with_w:
            return deconv, w, biases
        else:
            return deconv

Заранее спасибо. Это было бы очень полезно для меня.

0 ответов

Другие вопросы по тегам