TensorSpace.jsでニューラルネットワークを3D可視化

Pocket

はじめに

皆様TensorSpace.jsをご存知でしょうか。

TensorSpace.jsとは、ニューラルネットワークを可視化するNode.jsのライブラリのことです。可視化大好きマンとしてはv0.1の時から触ってはいて、ずっと記事を書きたいと思っていたのですが気づいたら年が明けてました。。。

さて、ニューラルネットワークの可視化と言えばTensorFlow.jsがありますが、TensorSpace.jsはTensorFlow.jsを基にした、3D可視化ライブラリです。公式ページのPlaygroundで様々なデモが見られます(リンクはLeNetのもの)。まず触ってイメージをつけてみてください。ニューラルネットワークをぐりぐり動かして遊べるのって面白いと思いませんか?

この記事では、公式のDocumentationを基に、Kerasでモデルを学習させ、表示するまでの一連の流れを行います。ソースコードは公開されているサンプルを流用しますので、ほとんどコードを書かずに行えます。一回試してしまえば細かく変更することで独自モデルの可視化もできるようになりますので、気軽にやっていきましょう!

前提条件

筆者はWindows 10で行います。OSに依存することはあまりないと思いますが、他OSで行う方は適宜読み替え下さい。また、以下の内容は本記事では扱いません。以下の3つが使えるよう、事前に準備をお願いします。

  • Node.jsとnpm
  • Mozilla Firefox
  • Google Colaboratory

Google Colaboratoryに関しては、以前書きました記事をご参照ください。

やってみる

1.  TensorSpace.jsの導入

npm install tensorspace 以上です。

導入が完了したらTensorSpace.jsのgitリポジトリをCloneし、tensorspace/examples/helloworld/helloworld.htmlを開いてみてください。以下のようなページが表示されれば成功です。

ただ、Google Chrome等一部のブラウザだと

browser_http.ts:171 Fetch API cannot load file:///C:/~~~~/tensorspace/examples/helloworld/model/mnist.json. URL scheme must be “http” or “https” for CORS request

といったエラーが出て表示されない場合があります。Chromeのローカルファイル読み込みの制限に引っかかっているだけですので、Firefoxで開けば回避できます。

2. モデルの学習&出力

それでは本題です。モデルを学習し、TensorSpace.js用に出力しましょう!DocumentationのPreProcessingのKerasを参考に、Google Colaboratory上で進めていきます。

keras_model.pyを用いてやっていきましょう!Documentationのページからでも参照できますが、1. TensorSpace.jsの導入 でCloneしたリポジトリの、tensorspace/docs/preprocess/Keras/src_py/keras_model.py にあります。

このコードでは、MNISTをLeNetで行います。ただし、keras_model.pyはそのままでは学習済みのモデルを読み込んで、結果をコンソールに出力するだけのコードになっています。いくつかのメソッドが定義されているので、使うメソッドを選択して、モデルを学習し、TensorSpace.jsのために出力しましょう!

今回使うメソッドは以下の通りです。

メソッド名
概要
train_model LeNetモデルを構築し、MNISTデータセットを用いて学習する。
generate_encapsulate_model_with_output_layer_names モデルをTensorSpace.js用に変換する。
save_model モデルを出力する。

それでは99行目以降を書き換えて(といってもコメントをつけたり外したりしていくだけですが)学習と出力を行いましょう!最終的には以下のようになります。

コメントで要所の解説を加筆しています。書き換えたコードをGoogle Colaboratoryにコピペして実行してみましょう。

上のような出力が得られ、models/end_keras_model.h5が出力されます。 !lsコマンドで出力を確認します。enc_keras_model.h5が表示されれば成功です。これで学習と出力は完了です。

3. TensorSpace.js用に変換

※2. モデルの学習&出力 で用いたGoogle Colaboratory上で引き続き行ってください。

tensorflowjs converterを用いて、前項で出力したモデルをTensorSpace.jsで読み込めるよう変換を行います。まずはインストールを行いましょう

!pip install tensorflowjs 
次に変換を行います。わかりやすいように同じディレクトリに出力します。

「Using TensorFlow backend.」とだけ表示され、処理が完了します。kerasディレクトリに出力されているので、zipに圧縮して !zip -r keras.zip keras ダウンロードします。

解凍し、以下のようなファイルがあることを確認してください。

4. TensorSpace.jsでの表示

ここまでくればあと一息です!最初にCloneしたリポジトリの、tensorspace-master/examples/lenetを書き換えて表示しましょう!書き換える内容は以下の2点です!

  • 読み込むモデルの変更
  • ネットワークの変更

読み込むモデルの変更 で行うことは、今読み込んでいるモデルと、今回生成したモデルの差し替えです。先ほどダウンロードした2つのファイルを、lenet/lenetModelに移動してください。

次に、lenet/lenet.htmlを書き換えて読み込む対象ファイルを変更します。検索で「model.load」が書かれている箇所を探し、読み込みタイプをtfjsからkerasへ、対象ファイルをmnist.jsonからmodel.jsonへ変更します。

変更前

変更後

次に、ネットワークの変更 を行います。lenet.htmlに書かれているネットワークと、今回用いたネットワークを比べると、159行目からの以下のコードが不要なことがわかります。

まとめてコメントアウトしてしまいましょう!

5. 表示

これにてすべての準備が完了しました!lenet.htmlをFirefoxで開いてみましょう!

表示されました!ためしに適当に入力してみましょう。

反映されましたね。最終層(白い層)をクリックして開いてみると……?

ちゃんと推定できています!やったーー!

おわりに

いかがでしたでしょうか。書き換えで行ったので殆ど負担なく、自分が学習させたモデルの可視化ができましたね。LeNetだとそこまで面白みはないのですが、より複雑なモデルを出力してみる等色々遊べると思います。GANを出力すると結構面白い結果になるのではないでしょうか。皆さんのよき可視化ライフの一助になれれば幸いです!

お問い合わせ先

執筆者プロフィール

Hibino Ichirou
Hibino Ichiroutdi デジタルイノベーション技術部
入社して半年間ロボコン活動に専念。少しのJavaエンジニア期間を経てデータ分析や機械学習、Deep Learningをテーマに勤労しております。
昔取った杵柄を摩耗させつつ新たな支えを求めて試行錯誤中。
Pocket

関連記事