Tensorflow2.0 用pix2pixHD-GAN生成类条件图像

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

我试图在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_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]
请帮帮我