python - 如何可视化 TensorFlow 模型的结构
问题描述
我有一个简单的项目模型,它接收一些天气数据并预测温度。结构如下:
- 24 个输入,10 个特征(每小时一个输入,因此 24 小时输入数据)
- 1个输出是温度
该模型有效,我对此很好,但是我需要展示模型的工作方式,我不确定我看到的关于模型的一些值是如何描述它的。我正在努力直观地表示内部结构(如神经元或节点)。
这是模型(静态 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) 格式下。
除了我觉得我理解这些数字代表什么之外,我还不能完全理解模型的“外观”。我主要在训练和预测期间努力区分结构。
以下是我的想法(请注意,我将描述基于神经元的模型):
- 输入是一个 24x10 的 DataFrame
- 因此,输入是 240 个值,可以看作 24 组 10 个神经元?(不确定我在这里)
return_sequences
意味着 240 个值在整个模型中传播?(这里还是不确定)- “神经元”结构类似于:
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 ?
代表我想要理解的内容,即有多少层,每层有多少神经元
解决方案
推荐阅读
- javascript - socket.io 连接返回一个空数组。在不重新加载页面的情况下在 React 中接收数据的方法?
- android - 对话框警报单击时应用程序崩溃
- javascript - 如何修复“错误类型错误:data.slice 不是函数”?
- python - 在python中导入网格
- apache-spark - Spark 自定义日志记录
- python-3.x - 为什么我的仪表板应用程序无法正确更新?
- java - 如何使用 Spring-Boot 在 Java 项目中使用 Clojure 库?
- git - 仅显示作为我的提交之一的祖先的提交?
- angular5 - 当 TAB 超出 ag-grid 的最后一个单元格时需要添加新行
- java - 区分“无法为对象分配空间”异常