tensorflow 2.0,在调用函数时给定了两个变量,但是在定义函数时没有变量

时间:2019-04-14 21:15:22

标签: python tensorflow deep-learning tf.keras tensorflow2.0

我正在关注tensorflow-2.0中的教程。在定义生成器时,没有给出任何变量,但是在调用函数时,给出了两个变量。

def generator_model():
    model = tf.keras.Sequential()
    model.add(layers.Dense(7*7*256, use_bias=False, input_shape=(100,)))
    model.add(layers.BatchNormalization())
    model.add(layers.LeakyReLU())

    model.add(layers.Reshape((7, 7, 256)))
    assert model.output_shape == (None, 7, 7, 256) # Note: None is the batch size

    model.add(layers.Conv2DTranspose(128, (5, 5), strides=(1, 1), padding='same', use_bias=False))
    assert model.output_shape == (None, 7, 7, 128)
    model.add(layers.BatchNormalization())
    model.add(layers.LeakyReLU())

    model.add(layers.Conv2DTranspose(64, (5, 5), strides=(2, 2), padding='same', use_bias=False))
    assert model.output_shape == (None, 14, 14, 64)
    model.add(layers.BatchNormalization())
    model.add(layers.LeakyReLU())

    model.add(layers.Conv2DTranspose(1, (5, 5), strides=(2, 2), padding='same', use_bias=False, activation='tanh'))
    assert model.output_shape == (None, 28, 28, 1)

    return model


generator = generator_model()
noise = tf.random.normal([1, 100])
generated_image = generator(noise, training=False) 

这是tensorflow网站上的官方教程。

1 个答案:

答案 0 :(得分:4)

def generator_model()创建并返回模型对象。然后,您可以将数据提供给generator对象以生成图像。没有矛盾。 def generator_model()仅创建生成器对象,稍后将使用它。

如您在此处看到的https://www.tensorflow.org/api_docs/python/tf/keras/models/Sequential#call

tf.keras.Sequential()对象具有__call__函数,这意味着您可以调用实例。(Python __call__ special method practical example)并且它仅包装了另一个调用函数。