tensorflow - 解释 - 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']
)
解决方案
在第一行中,您将输入定义为等于预训练模型的输入。然后将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
推荐阅读
- xamarin.forms - Xamarin Android 中是否有等效的 DispatchAfter?
- javascript - 使用国际化 API 会导致更长的加载时间
- flutter - 如何将子项添加到 ExpansionPanelList - ListView.Builder?
- rust - 为什么 Rust 不阻止我声明多个可变引用?
- python - Python动态,多线程变量不起作用
- python - 如何让我的海龟赛跑游戏连续运行?
- c# - 无法从 'System.Linq.Expressions.Expression 转换
>' 到 'System.Linq.Expressions.Expression >' - jq - 使用 jq 变量(来自“as”)查找键
- scala - Spark Scala 从选择查询结果中填充数据框
- ruby - 如何使用 Ruby 将图像发送到运行 TensorFlow/Keras CNN 的已部署 Sagemaker 端点?