构建生成对抗网络时遇到输入与层不兼容的错误

问题描述 投票:0回答:0

我试图建立一个生成对抗网络。我在互联网上阅读了一些教程,一切都很顺利。为了使教程中的其中一个适应我正在处理的特定问题,我编写了以下代码:

# Define the generator model
def make_generator_model():
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Dense(16, use_bias=False, input_shape=(4,)))
    model.add(tf.keras.layers.BatchNormalization())
    model.add(tf.keras.layers.LeakyReLU())

    model.add(tf.keras.layers.Dense(8, use_bias=False))
    model.add(tf.keras.layers.BatchNormalization())
    model.add(tf.keras.layers.LeakyReLU())

    model.add(tf.keras.layers.Dense(4, use_bias=False, activation='sigmoid'))

    return model

对于判别器模型:

# Define the discriminator model
def make_discriminator_model():
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Dense(8, use_bias=False, input_shape=(8,)))
    model.add(tf.keras.layers.BatchNormalization())
    model.add(tf.keras.layers.LeakyReLU())

    model.add(tf.keras.layers.Dense(4, use_bias=False))
    model.add(tf.keras.layers.BatchNormalization())
    model.add(tf.keras.layers.LeakyReLU())

    model.add(tf.keras.layers.Dense(1, use_bias=False, activation='sigmoid'))

    return model

GAN模型:

# Define the CGAN model
def make_cgan_model(generator, discriminator):
    z = tf.keras.layers.Input(shape=(4,))
    c = tf.keras.layers.Input(shape=(4,))
    x = generator(tf.keras.layers.concatenate([z, c]))

    discriminator.trainable = False
    validity = discriminator(tf.keras.layers.concatenate([x, c]))

    return tf.keras.Model(inputs=[z, c], outputs=validity)

# Define the CGAN components
generator = make_generator_model()
discriminator = make_discriminator_model()
cgan = make_cgan_model(generator, discriminator)

想法是将鉴别器与生成器联系起来,因为最后的输出是第一个的输入。

一切似乎都正常,直到我运行最后一行,我将在这里重复错误:

   ...: cgan = make_cgan_model(generator, discriminator)
WARNING:tensorflow:Model was constructed with shape (None, 4) for input KerasTensor
(type_spec=TensorSpec(shape=(None, 4), dtype=tf.float32,
 name='dense_12_input'),     name='dense_12_input', 
description="created by layer 'dense_12_input'"), but it was called
     on an input with incompatible shape (None, 8).

ValueError                                Traceback (most recent call last)
<ipython-input-24-22e1d0bf219e> in <module>
     31 generator = make_generator_model()
     32 discriminator = make_discriminator_model()
 ---> 33 cgan = make_cgan_model(generator, discriminator)

<ipython-input-24-22e1d0bf219e> in make_cgan_model(generator, discriminator)
      3     z = tf.keras.layers.Input(shape=(4,))
      4     c = tf.keras.layers.Input(shape=(4,))
----> 5     x = generator(tf.keras.layers.concatenate([z, c]))
      6 
      7     discriminator.trainable = False

~/.virtualenvs/cgan_tf/lib/python3.10/site-packages/keras/utils/traceback_utils.py in error_handler(*args, **kwargs)
     68             # To get the full stack trace, call:
     69             # `tf.debugging.disable_traceback_filtering()`
---> 70             raise e.with_traceback(filtered_tb) from None
     71         finally:
     72             del filtered_tb

~/.virtualenvs/cgan_tf/lib/python3.10/site-packages/keras/engine/input_spec.py in assert_input_compatibility(input_spec, inputs, layer_name)
275                     None,
276                 }:
--> 277                     raise ValueError(
278                         f'Input {input_index} of layer "{layer_name}" is '
279                         f"incompatible with the layer: expected axis {axis} "

ValueError: Exception encountered when calling layer "sequential_4" (type Sequential).

Input 0 of layer "dense_12" is incompatible with the layer: expected axis -1 of input shape to have value 4, but received input with shape (None, 8)

Call arguments received by layer "sequential_4" (type Sequential):
  • inputs=tf.Tensor(shape=(None, 8), dtype=float32)
  • training=None
  • mask=None

我试图找到一些关于这个的参考资料或解释,但我找不到。我不知道这意味着什么,所以任何关于我如何解决这个问题的澄清和指导将不胜感激!!!

neural-network tf.keras keras-layer
© www.soinside.com 2019 - 2024. All rights reserved.