解释 - x = tf.Keras.layers.Dense(128, activation='relu')(pretrained_model.output) [重复]

Posted

技术标签:

【中文标题】解释 - x = tf.Keras.layers.Dense(128, activation=\'relu\')(pretrained_model.output) [重复]【英文标题】:Explain - x = tf.Keras.layers.Dense(128, activation='relu')(pretrained_model.output) [duplicate]解释 - x = tf.Keras.layers.Dense(128, activation='relu')(pretrained_model.output) [重复] 【发布时间】:2021-12-05 18:44:51 【问题描述】:

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

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

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

完整代码:

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']
)

【问题讨论】:

tensorflow.org/guide/keras/functional 这个问题已经被问过很多次了,你应该先搜索一下网站,看看你的问题是否已经得到解答。 【参考方案1】:

在第一行中,您将 inputs 定义为等于预训练模型的输入。然后定义 x 等于预训练模型的输出(在应用额外的密集层之后)。 Tensorflow 现在自动识别 inputsx 是如何连接的。如果我们假设,预训练模型由五层[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

【讨论】:

以上是关于解释 - x = tf.Keras.layers.Dense(128, activation='relu')(pretrained_model.output) [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow RNN LSTM 输出解释

Keras 接口的 Input 输入model savetfrecord 输入

tf.keras.layers.GRU理解

tf.keras 模型 多个输入 tf.data.Dataset

使用 dropout (TF2.0) 时,可变批量大小不适用于 tf.keras.layers.RNN?

使用tf.contrib.opt.ScipyOptimizerInterface和tf.keras.layers,丢失不变