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
Заранее спасибо. Это было бы очень полезно для меня.