首页 > 解决方案 > 如何可视化 TensorFlow 模型的结构

问题描述

我有一个简单的项目模型,它接收一些天气数据并预测温度。结构如下:

该模型有效,我对此很好,但是我需要展示模型的工作方式,我不确定我看到的关于模型的一些值是如何描述它的。我正在努力直观地表示内部结构(如神经元或节点)。

这是模型(静态 input_shape 在我的代码中没有静态设置,纯粹是为了帮助回答问题):

forward_layer = tf.keras.layers.LSTM(units=32, return_sequences=True)
backward_layer = tf.keras.layers.LSTM(units=32, return_sequences=True, go_backwards=True)
bilstm_model = tf.keras.models.Sequential([
    tf.keras.layers.Bidirectional(forward_layer, backward_layer=backward_layer, input_shape=(24, 10)),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.LSTM(32, return_sequences=True),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.LSTM(32, return_sequences=True),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.LSTM(32, return_sequences=False),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(units=1)
])

请注意,我将图层分开的原因Bidirectional是因为我正在使用 TFLite 运行它,并且如果两者没有预先定义但内部工作原理是相同的,据我所知,会出现问题。

现在,一些专家可能已经弄清楚了,输入形状是(32, 24, 10),输出形状是(32, 1)输入在 (batch_size, sequence_length, features) 格式下,输出在 (batch_size, units) 格式下。

除了我觉得我理解这些数字代表什么之外,我还不能完全理解模型的“外观”。我主要在训练和预测期间努力区分结构。

以下是我的想法(请注意,我将描述基于神经元的模型):

Input(240 neurons) -> BiLSTM(240 neurons) ->
Dropout(240 neurons, 20% drop rate) -> LSTM(240 neurons) ->
Dropout(240 neurons, 20% drop rate) -> LSTM(240 neurons) ->
Dropout(240 neurons, 20% drop rate) -> LSTM(240 neurons) ->
Dropout(? neurons, 20% drop rate) -> Dense(1 neurons) = Output

如果我没记错的话,Dropout严格来说,该层并不是一个层,但它会阻止(在这种情况下)20% 的输入神经元(或输出,我不确定)激活 20% 的输出神经元。

我真的很感谢在可视化结构方面的帮助,所以提前感谢任何准备帮助我的勇敢的灵魂

编辑

这是我试图从数字中得到的一个例子。请注意,此图像代表第一个 BiLSTM 层,而不是整个模型。

这是一个示例可视化

图像中的x ?代表我想要理解的内容,即有多少层,每层有多少神经元

标签: pythontensorflowkeraslstm

解决方案


推荐阅读