Tensorflow2.0 用pix2pixHD-GAN生成类条件图像
我试图在tensorflow 2中实现Nvidia的pix2pixHD GAN,以便使用标签名而不是实例映射。我不想使用实例映射生成图像,我使用的是GitHub的tensorflow实现: 我不熟悉生成性对抗网络。这是我更改的代码:Tensorflow2.0 用pix2pixHD-GAN生成类条件图像,tensorflow2.0,generative-adversarial-network,Tensorflow2.0,Generative Adversarial Network,我试图在tensorflow 2中实现Nvidia的pix2pixHD GAN,以便使用标签名而不是实例映射。我不想使用实例映射生成图像,我使用的是GitHub的tensorflow实现: 我不熟悉生成性对抗网络。这是我更改的代码: class GlobalGenerator(keras.Model): def __init__(self, latent_size, input_nc, output_nc, ngf=64, n_downsampling=3, n_blocks=9, norm_l
class GlobalGenerator(keras.Model):
def __init__(self, latent_size, input_nc, output_nc, ngf=64, n_downsampling=3, n_blocks=9, norm_layer=get_norm_layer('batch'), padding_type='REFLECT', classes = 10):
assert(n_blocks >= 0)
super(GlobalGenerator, self).__init__()
self.padding_type = padding_type
self.output_nc = output_nc
paddings = (3, 3)
activation = layers.ReLU()
# Input 1: Image Class
image_class = layers.Input(shape=(1,), dtype='int32', name='image_class')
# Class Embeddings
emb = layers.Embedding(classes, latent_size, embeddings_initializer='glorot_normal')(image_class)
# 10 classes in MNIST
cls = layers.Flatten()(emb)
# Input 2: latent noise vector
latent_input = layers.Input(shape=(latent_size,), name='latent_noise')
# hadamard product between latent embedding and a class conditional embedding
h = layers.multiply([latent_input, cls])
# padd1 = ReflectionPad2d(paddings)(latent_input)
gConv1 = layers.Conv2D(ngf, 7, kernel_initializer=weight_init['conv'])(latent_input)
norm1 = norm_layer()(gConv1)
act1 = activation(norm1)
for i in range(n_downsampling):
mult = 2**i
down1Lay = layers.Conv2D(ngf * mult * 2, 3, strides=2, padding='same', kernel_initializer=weight_init['conv'])(act1)
down1Norm = norm_layer()(down1Lay)
down1Act = activation(down1Norm)
mult = 2**n_downsampling
for i in range(n_blocks):
resnet1 = ResnetBlock(dim=ngf * mult, padding_type=padding_type, norm_layer=norm_layer, activation=activation)(down1Act)
for i in range(n_downsampling):
mult = 2**(n_downsampling - i)
upSamp1 = layers.Conv2DTranspose(int(ngf * mult / 2), 3, strides=2, padding='same', output_padding=1, kernel_initializer=weight_init['conv'])(resnet1)
up1Norm = norm_layer()(upSamp1)
up1Act = activation(up1Norm)
aftrUp1A = ReflectionPad2d(paddings)(up1Act)
aftrUp1B = layers.Conv2D(self.output_nc, 7, kernel_initializer=weight_init['conv'])(aftrUp1A)
afterUp1C = Tanh(name='global_output')(aftrUp1B)
self.model = model
def call(self, x):
x = self.model(x)
return x
使用此代码,我得到了错误:
ValueError: Input 0 of layer conv2d is incompatible with the layer: : expected min_ndim=4, found ndim=2. Full shape received: [None, 3]
请帮帮我