6
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

多層パーセプトロンの重みを可視化してみる

Posted at

はじめに

多層パーセプトロンのニューラルネットワークを学習させた後、何らかの方法で可視化してみないと、ブラックボックスになってしまい、どうなっているのかよく分からない、と感じていました。
入力データが画像の場合は、割と可視化しやすいのですが、単なるデータの場合は、どうしたもんかと調べていたところ、この記事を見つけ、早速試してみました。

Deep LearningをKerasで可視化したい
http://recruit.gmo.jp/engineer/jisedai/blog/deep-learning-keras/

以前書いたこちらの記事
暗号化された通信内の実際のプロトコルを、ニューラルネットワークで識別してみる
http://qiita.com/kznx/items/2eec63ed55740262c9ab
のニューラルネットワークをベースに、上記の記事の手法を使わせていただき、重みを可視化してみました。

重みを可視化

入力データ(22次元)から最初のレイヤー(50ユニット)へのすべての重みを 22 x 50 の色で可視化します。また、折れ線グラフは、入力層から次の層への重みの平均を表しており、どの入力データが、次の層に影響力があるかがわかります。この例だと、18, 19の入力データの影響が大きくなっています。

    for i in [0, 3, 6, 8, 11, 13, 15]:
        # weights 結果をplot
        w1 = model.layers[i].get_weights()[0]
        plt.imshow(w1, cmap='coolwarm', interpolation='nearest')
        plt.colorbar()
        plt.figure()
        plt.plot((w1**2).mean(axis=1), 'o-')
        plt.show()

weight_visualization.png
weight_summary.png

ちなみに18は Total packets in the forward direction、19はTotal bytes in the forward directionということで、一セッションあたりのパケット数やバイト数がプロトコルの識別に重要という、ちょっと意外な結果となりました。

6
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?