首页 > 解决方案 > 解释 - x = tf.Keras.layers.Dense(128, activation='relu')(pretrained_model.output)

问题描述

谁能向我详细解释这段代码,我不明白突出显示的部分。我的意思是他们为什么放:

x =  tf.Keras.layers.Dense(128, activation='relu')(pretrained_model.output)

Dense()() 后跟另一个括号 wat 可能是原因吗?

完整代码:

inputs = pretrained_model.input
x = tf.keras.layers.Dense(128, activation='relu')(pretrained_model.output)
outputs = tf.keras.layers.Dense(9, activation='softmax')(x)

model = tf.keras.Model(inputs=inputs, outputs=outputs)

model.compile(
    optimizer='adam',
    loss='categorical_crossentropy',
    metrics=['accuracy']
)

标签: tensorflowdeep-learningcomputer-visionartificial-intelligence

解决方案


在第一行中,您将输入定义为等于预训练模型的输入。然后将x定义为等于预训练模型的输出(在应用额外的密集层之后)。Tensorflow 现在可以自动识别输入x的连接方式。如果我们假设,预训练模型由五层组成[pretrained_in,pretrained_h_1,pretrained_h_2,pretrained_h_3,pretrained_out],这意味着tensorflow意识到,信息将采取以下方式:

输入-> pretrained_in -> pretrained_h_1 -> pretrained_h_2 -> pretrained_h_3 -> pretrained_out -> new_dense_layer -> x

如果我们现在考虑最后的层,我们将有以下信息流:

输入-> pretrained_in -> pretrained_h_1 -> pretrained_h_2 -> pretrained_h_3 -> pretrained_out -> new_dense_layer -> x -> dense_layer_softmax -> 输出

现在 "model = tf.keras.Model(inputs=inputs, outputs=outputs)" 语句只是告诉 tensorflow,它应该将此信息流视为一个新模型,以便您可以轻松地将新信息传递给所有这些层只需使用这个新模型。

编辑:您问为什么 Dense 后跟两个括号。layers.Dense() 调用实际上不是处理数据的函数。相反,如果您调用 tf.keras.layers.Dense(),tensorflow 基本上会创建一个新的密集层并将其返回给您,然后您可以使用它来处理您的数据。您实际上可以将其写成两行以使其更清楚:

dense_layer = layers.Dense(128, activation='relu')   # We define a new dense layer
dense_layer_output = dense_layer(pretrained_model.output)    # We apply the dense layer to the data

推荐阅读