gpt4 book ai didi

python - 计算/可视化 Tensorflow Keras Dense 模型层与输出类的相对连接权重

转载 作者:行者123 更新时间:2023-12-01 01:32:31 25 4
gpt4 key购买 nike

这是我的 tensorflow keras 模型,(如果它让事情变得困难,你可以忽略 dropout 层)

import tensorflow as tf
optimizers = tf.keras.optimizers
Sequential = tf.keras.models.Sequential
Dense = tf.keras.layers.Dense
Dropout = tf.keras.layers.Dropout
to_categorical = tf.keras.utils.to_categorical

model = Sequential()
model.add(Dense(256, input_shape=(20,), activation="relu"))
model.add(Dropout(0.1))
model.add(Dense(256, activation="relu"))
model.add(Dropout(0.1))
model.add(Dense(256, activation="relu"))
model.add(Dropout(0.1))
model.add(Dense(3, activation="softmax"))

adam = optimizers.Adam(lr=1e-3) # I don't mind rmsprop either
model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()

我已将模型结构和权重保存为

model.save("sim_score.h5", overwrite=True)
model.save_weights('sim_score_weights.h5', overwrite=True)

在执行 model.predict(X_test) 时,我得到 [0.23, 0.63, 0.14] 这是 3 个输出类的预测概率。

How would I visualize how much weight/importance each of my initial 20 features have in this model w.r.t the 3 output softmax?

例如,我的第二列对最终结果的影响可以忽略不计,而第五列对输出预测的影响可能是第 20 列的 3 倍。第 5 列的绝对效果是什么并不重要,只要计算出相对重要性就足够了,例如 第 5 列 = 0.3,第 20 列 = 0.1 等等,对于 20 x 3 矩阵

查看此animation直觉或 Tensorflow playground 。可视化不必显示训练过程中权重如何变化,而只需显示训练结束时权重的快照图像。

In fact, the solution does not even have to be a visualization, it can even be an array of 20 elements x 3 outputs having the relative importance of each feature w.r.t the 3 output softmax and importance relative to the other features.

了解中间层的重要性只是一个额外的好处。

我想要可视化 20 个特征的原因是出于透明度目的(目前模型感觉就像一个黑匣子)。我对 matplotlib、pyplot、seaborn 很熟悉。我也知道 Tensorboard,但找不到任何使用 Softmax 的简单 Dense Relu 网络的示例。

我认为获得 20 x 3 权重的一种耗时方法是从 0 - 1 进行域搜索 20 个特征,增量为 0.5 通过发送各种输入并尝试据此推断特征的重要性(这将是 3 的 20 次方 ~= 34 ​​亿可能的样本空间,并且我添加的功能越多,情况就会呈指数级恶化),然后应用条件概率对相对权重进行逆向工程,但我不确定是否有通过 TensorBoard 或某些自定义逻辑的更简单/优化的方法。

有人可以通过代码片段帮助可视化模型/计算 20 个特征与 3 个输出的 20 x 3 = 60 相对权重,或者提供有关如何实现此目标的引用吗?

最佳答案

我遇到过类似的问题,但我更关心模型参数(权重和偏差)的可视化,而不是模型特征[因为我也想探索和查看黑匣子]。

例如,以下是具有 2 个隐藏层的浅层神经网络的片段。

model = Sequential()
model.add(Dense(128, input_dim=13, kernel_initializer='uniform', activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(64, kernel_initializer='uniform', activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(64, kernel_initializer='uniform', activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(8, kernel_initializer='uniform', activation='softmax'))

# Compile model
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

# Using TensorBoard to visualise the Model
ks=TensorBoard(log_dir="/your_full_path/logs/{}".format(time()), histogram_freq=1, write_graph=True, write_grads=True, batch_size=10)

# Fit the model
model.fit(X, Y, epochs = 64, shuffle = True, batch_size=10, verbose = 2, validation_split=0.2, callbacks=[ks])

为了能够可视化参数,需要记住一些重要的事情:

  1. 始终确保 model.fit() 函数中有一个validation_split[否则直方图无法可视化]。

  2. 确保 histogram_freq > 0 的值始终!![否则不会计算直方图]。

  3. 对 TensorBoard 的回调必须在 model.fit() 中以列表形式指定。

一次,这就完成了;转到 cmd 并键入以下命令:

tensorboard --logdir=logs/

这将为您提供一个本地地址,您可以通过该地址在网络浏览器上访问 TensorBoard。所有直方图、分布、损失和准确度函数都将以图表形式提供,并且可以从顶部的菜单栏中进行选择。

希望这个答案给出有关可视化模型参数的过程的提示(我自己也遇到了一些困难,因为上述几点不能同时使用)。

如果有帮助请告诉我。

以下是 keras 文档链接供您引用:

https://keras.io/callbacks/#tensorboard

关于python - 计算/可视化 Tensorflow Keras Dense 模型层与输出类的相对连接权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52703096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com