論文を書いたり、ニューラルネットワークに関するトピックについてプレゼンテーションを行う場合、通常はネットワークアーキテクチャを視覚化します。
一般的なアーキテクチャを自動的に視覚化する良い/簡単な方法は何ですか?
論文を書いたり、ニューラルネットワークに関するトピックについてプレゼンテーションを行う場合、通常はネットワークアーキテクチャを視覚化します。
一般的なアーキテクチャを自動的に視覚化する良い/簡単な方法は何ですか?
回答:
ニューラルネットワークがTensorflowグラフとして与えられている場合、このグラフをTensorBoardで視覚化できます。
MNIST CNNは次のようになります。
名前/スコープ(「ドロップアウト」、「softmax」、「fc1」、「conv1」、「conv2」など)を自分で追加できます。
以下は左側のグラフについてのみです。右半分の4つの小さなグラフは無視します。
各ボックスは、学習可能なパラメーターを持つレイヤーです。推論のために、情報は下から上に流れます。楕円は、学習したパラメーターを含まないレイヤーです。
ボックスの色には意味がありません。
破線の小さなボックス( "gradients"、 "Adam"、 "save")の値がわかりません。
keras-sequential-asciiを使用してASCII視覚化を追加します(免責事項:私は著者です)。
CIFAR-10の小規模ネットワーク(このチュートリアルから)は次のようになります。
OPERATION DATA DIMENSIONS WEIGHTS(N) WEIGHTS(%)
Input ##### 32 32 3
Conv2D \|/ ------------------- 896 2.1%
relu ##### 30 30 32
MaxPooling2D Y max ------------------- 0 0.0%
##### 15 15 32
Conv2D \|/ ------------------- 18496 43.6%
relu ##### 13 13 64
MaxPooling2D Y max ------------------- 0 0.0%
##### 6 6 64
Flatten ||||| ------------------- 0 0.0%
##### 2304
Dense XXXXX ------------------- 23050 54.3%
softmax ##### 10
VGG16の場合:
OPERATION DATA DIMENSIONS WEIGHTS(N) WEIGHTS(%)
Input ##### 3 224 224
InputLayer | ------------------- 0 0.0%
##### 3 224 224
Convolution2D \|/ ------------------- 1792 0.0%
relu ##### 64 224 224
Convolution2D \|/ ------------------- 36928 0.0%
relu ##### 64 224 224
MaxPooling2D Y max ------------------- 0 0.0%
##### 64 112 112
Convolution2D \|/ ------------------- 73856 0.1%
relu ##### 128 112 112
Convolution2D \|/ ------------------- 147584 0.1%
relu ##### 128 112 112
MaxPooling2D Y max ------------------- 0 0.0%
##### 128 56 56
Convolution2D \|/ ------------------- 295168 0.2%
relu ##### 256 56 56
Convolution2D \|/ ------------------- 590080 0.4%
relu ##### 256 56 56
Convolution2D \|/ ------------------- 590080 0.4%
relu ##### 256 56 56
MaxPooling2D Y max ------------------- 0 0.0%
##### 256 28 28
Convolution2D \|/ ------------------- 1180160 0.9%
relu ##### 512 28 28
Convolution2D \|/ ------------------- 2359808 1.7%
relu ##### 512 28 28
Convolution2D \|/ ------------------- 2359808 1.7%
relu ##### 512 28 28
MaxPooling2D Y max ------------------- 0 0.0%
##### 512 14 14
Convolution2D \|/ ------------------- 2359808 1.7%
relu ##### 512 14 14
Convolution2D \|/ ------------------- 2359808 1.7%
relu ##### 512 14 14
Convolution2D \|/ ------------------- 2359808 1.7%
relu ##### 512 14 14
MaxPooling2D Y max ------------------- 0 0.0%
##### 512 7 7
Flatten ||||| ------------------- 0 0.0%
##### 25088
Dense XXXXX ------------------- 102764544 74.3%
relu ##### 4096
Dense XXXXX ------------------- 16781312 12.1%
relu ##### 4096
Dense XXXXX ------------------- 4097000 3.0%
softmax ##### 1000
Netronと呼ばれるオープンソースプロジェクトがあります。
Netronは、ニューラルネットワーク、ディープラーニング、機械学習モデルのビューアです。
Netronは、ONNX(.onnx、.pb)、Keras(.h5、.keras)、CoreML(.mlmodel)、およびTensorFlow Lite(.tflite)をサポートしています。Netronは、Caffe(.caffemodel)、Caffe2(predict_net.pb)、MXNet(-symbol.json)、TensorFlow.js(model.json、.pb)、およびTensorFlow(.pb、.meta)を実験的にサポートしています。
ケラス
keras.utils.vis_utilsモジュールは、Kerasモデルをプロットするユーティリティ関数を提供します(graphvizを使用)
以下は、最初の隠れ層に50個のニューロンがあり、104個の入力変数を予期するネットワークモデルを示しています。
plot_model(model, to_file='model.png', show_shapes=True, show_layer_names=True)
Pythonパッケージconx
はnet.picture()
、次のようなSVG、PNG、またはPILイメージを生成する機能を使用して、アクティベーションでネットワークを視覚化できます。
ConxはKeras上に構築されており、Kerasのモデルを読み取ることができます。各バンクのカラーマップは変更でき、すべてのバンクタイプを表示できます。
詳細については、http://conx.readthedocs.io/en/latest/をご覧ください。
私は、ドラッグアンドドロップのニューラルネットワークビジュアライザー(およびその他)に取り組んでいます。LeNetのようなアーキテクチャの視覚化の例を次に示します。 ファンアウトとファンインを備えたモデルも非常に簡単にモデル化できます。https://math.mit.edu/ennui/のWebサイトにアクセスできます。
Rではnnet
、プロット関数は付属していませんが、そのためのコードはここで提供されています。
別の方法としてneuralnet
、plot.neuralnet
機能を備えた、より最近のIMHOより優れたパッケージを使用することもできます。
data(infert, package="datasets")
plot(neuralnet(case~parity+induced+spontaneous, infert))
neuralnet
はずっと古く、r-cranに同梱されているnnet
ため、あまり使用されていませんnnet
。しかしneuralnet
、Tensorflowのようなパッケージにも欠けている回復力のある逆伝播を含む、より多くのトレーニングアルゴリズムがあり、ハイパーパラメーターの選択に対してはるかに堅牢であり、全体的に多くの機能を備えています。
ニューラルネットワークの視覚化には、いくつかの新しい代替の取り組みがあります。
これらの記事をご覧ください:
見事な「AI脳スキャン」により、マシンが新しいスキルを学習するときに見るものが明らかになります
これらのアプローチは、ニューラルネットワークの動作を視覚化することに重点を置いていますが、NNアーキテクチャも結果の図で多少見えます。
例:
論文自体は気の利いたものではありませんが、ニューラルネットワークの知識があまりない人にトポロジがどのように見えるかを示すのに非常に役立ちます。このJavascriptライブラリ(Neataptic)を使用すると、ネットワークを視覚化できます。
畳み込みネットの視覚化について説明している人気の高い論文、Deep Visualization Through Neural Networksを読むことができます。その実装は、各レイヤーを表示するだけでなく、活性化、重み、デコンボリューション、およびこのペーパーで詳しく説明されている他の多くのことも示します。コードはにありcaffe'
ます。興味深い部分は、事前に訓練されたモデルを自分のものに置き換えることができることです。
Netscopeは、Caffeモデル用の私の日常的なツールです。