ヒントン図を用いた重み行列の可視化

Beginner

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

はじめに

この実験では、重み行列を可視化するためのヒントン図をどのように使用するかを学びます。ヒントン図は、重み行列のような 2 次元配列を可視化したいときに非常に役立ちます。正の値と負の値はそれぞれ白と黒の正方形で表され、各正方形の大きさは各値の大きさを表します。

VM のヒント

VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、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という関数を定義し、それを使ってランダムな重み行列を生成しました。ヒントン図は、重み行列のような 2 次元配列を可視化する際に非常に役立ち、データのパターンや傾向を迅速に識別するために使用できます。