Help us understand the problem. What is going on with this article?

MNISTを認識するニューラルネットワークの画像化

More than 1 year has passed since last update.

ニューラルネットワークによる手書き数字認識について、各ノードへの元画像の影響を視覚化します。

アルゴリズム

【注】適当に思い付いたアルゴリズムです。どの程度正確に影響度が測れるかは未検証です。

比較の基準としてピクセルがすべて0のソースで各ノードの値を計算します。

評価対象とする画像を用意します。1ピクセルだけソースに入れて各ノードの値を計算して、すべて0のときと値を比較します。これをすべてのピクセルに対して行ったものを、ノードごとに特定のピクセルが与える影響とします。

これを画像化することで、視覚的に影響を見ることができます。

準備

『ゼロから作るDeep Learning』のサンプルを使います。

初回実行時にMNIST(手書き数字のデータ)をダウンロードするようになっているので、MNISTを使用するスクリプトを実行しておきます。

$ cd ch03
$ python neuralnet_mnist.py
Accuracy:0.9352

以下の2つのファイルを取り出します。

  • dataset/mnist.pkl
  • ch03/sample_weight.pkl

以下のスクリプトを実行すると、画像が生成されます。

画像例

ニューラルネットワークを計算して、途中のノードを取り出します。sigmoid 適用前後で画像はほとんど変化しないため a1, a2 は捨てます。しかし後で示すように softmax 適用前後では大きく変化するため a3 は拾います。

def predict(x):
    a1 = np.dot(x, W1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(z1, W2) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2, W3) + b3
    z3 = softmax(a3)
    return z1, z2, a3, z3

【追記 2017.08.26】 z1 は影響がピクセルごとに独立しているから良いのですが、z2 以降はピクセル間の影響があり、それを考慮していないことが判明しました。どのように修正するべきか検討中です。進展があれば追記する予定です。

すべて白にした画像を確認します。数値は softmax によって算出された確率を表します。

見出し.png
white.png

背景色(灰色)より明るければプラス、暗ければマイナスとなって、総合的にプラスが大きいものが確率が高くなります。プラスとマイナスは相殺するので、必ずしもはっきり形が分かるものが確率が高くなるとは限りません。softmax を通すとメリハリがなくなって何が何だか分からなくなります。

数字を確認します。すべて白の画像から数字の形にくり抜かれることが分かります。

0.png

1.png

2.png

3.png

4.png

5.png

6.png

7.png

8.png

9.png

参考

Pythonの書き方を参考にさせていただきました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした