使用辛顿图可视化权重矩阵

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将学习如何使用辛顿图(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 的函数来生成辛顿图,然后用它生成了一个随机权重矩阵。辛顿图对于可视化二维数组(如权重矩阵)非常有用,可用于快速识别数据中的模式和趋势。