简介
在本实验中,我们将学习如何使用辛顿图(Hinton diagrams)来可视化权重矩阵。当你想要可视化一个二维数组(如权重矩阵)时,辛顿图非常有用。正值和负值分别由白色和黑色方块表示,每个方块的大小代表每个值的大小。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”(Notebook)标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,可以随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。
导入库
我们将从导入本实验所需的库开始。在这种情况下,我们需要 matplotlib 和 numpy。
import matplotlib.pyplot as plt
import numpy as np
定义辛顿函数
接下来,我们将定义一个名为 hinton 的函数,该函数将生成辛顿图。此函数接受一个矩阵,即我们想要可视化的权重矩阵,以及一个 max_weight 参数,这是一个可选参数,用于指定归一化目的的最大权重值。
def hinton(matrix, max_weight=None, ax=None):
"""Draw Hinton diagram for visualizing a weight matrix."""
ax = ax if ax is not None else plt.gca()
if not max_weight:
max_weight = 2 ** np.ceil(np.log2(np.abs(matrix).max()))
ax.patch.set_facecolor('gray')
ax.set_aspect('equal', 'box')
ax.xaxis.set_major_locator(plt.NullLocator())
ax.yaxis.set_major_locator(plt.NullLocator())
for (x, y), w in np.ndenumerate(matrix):
color = 'white' if w > 0 else 'black'
size = np.sqrt(abs(w) / max_weight)
rect = plt.Rectangle([x - size / 2, y - size / 2], size, size,
facecolor=color, edgecolor=color)
ax.add_patch(rect)
ax.autoscale_view()
ax.invert_yaxis()
生成辛顿图
现在,我们将使用 numpy 生成一个随机权重矩阵,然后使用 hinton 函数生成辛顿图。
if __name__ == '__main__':
## Fixing random state for reproducibility
np.random.seed(19680801)
hinton(np.random.rand(20, 20) - 0.5)
plt.show()
总结
在本实验中,我们学习了如何使用辛顿图来可视化权重矩阵。我们定义了一个名为 hinton 的函数来生成辛顿图,然后用它生成了一个随机权重矩阵。辛顿图对于可视化二维数组(如权重矩阵)非常有用,可用于快速识别数据中的模式和趋势。