Python でニューラル ネットワーク アーキテクチャを視覚化する方法

Jupyter または Google Colab を使用してニューラル ネットワークの図式表現を作成するためのクイック ガイド

画像クレジット — Visualkeras と Jupyter Notebook を使用して著者によって開発されました。

人工ニューラル ネットワークや、畳み込みニューラル ネットワークやリカレント ニューラル ネットワークなどの他のバリエーションを使用しているときに、コンパイルされたモデルを視覚化して図式表現を作成したいと思うことがよくあります。これにより、次の 2 つの目的を解決できます。

  1. 複数のモデルを定義してトレーニングすることで、モデルの深さを視覚化し、さまざまなレイヤーとそれらがどのように順番に配置されるかを比較することができます。
  2. モデルの構造、各層で使用される活性化関数、各層の形状 (ニューロンの数)、トレーニングが必要なパラメーターをより深く理解できるようになります。

ニューラル ネットワーク モデルの視覚的表現を作成できる Python ですぐに利用できるパッケージがいくつかあります。 最初の 3 つのパッケージは、モデルがトレーニングされる前でも使用できます (モデルは定義してコンパイルする必要があるだけです)。ただし、Tensor Boards では、アーキテクチャを視覚化する前に、ユーザーが正確なデータに基づいてモデルをトレーニングする必要があります。

  1. ANNビジュアライザー
  2. ビジュアルケラス
  3. Keras モデルのプロット
  4. テンソルボード
pip インストール ビジュアルケラスpip インストール ann_visualizerpip インストール グラフビズ

「Tensor Board」と「Keras Model Plot」を別々にインストールする必要はありません。これは Tensorflow と Keras の初期インストールに付属します。

以下にリストされているライブラリのうち、いくつかのみを利用する場合があります。 ほとんどのライブラリは、データで明示的にトレーニングしなくても、TensorFlow モデルを図に変換できます。 これを唯一の真実の情報源と考えることができます。 Pandas、Skimage、OpenCV などの一部のライブラリは、構造化データや画像を読み取るときに便利です。

# 必要なライブラリをインポートするパンダをpdとしてインポートimport numpy as np # numpy をインポートfrom skimage import data, io # skimage ライブラリをインポートします (データ - テスト画像とサンプル データ。# io - 画像の読み取り、保存、表示。)skimage.color から rgb2gray をインポートimport matplotlib.pyplot as plt # import matplotlib.pyplot (Python のプロット フレームワーク)%matplotlibインラインimport os # このモジュールは、オペレーティング システムに依存する機能を使用する移植可能な方法を提供します。os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'インポートの警告# 警告を抑制するwarnings.filterwarnings( 'ignore')IPython.display からインポート表示cv2をcvとしてインポートします
sklearn.metricsインポートからconstruction_matrix
sklearn.model_selectionからインポートtrain_test_splittensorflow.keras インポート ユーティリティからtensorflow.keras.models から import Sequential,load_modeltensorflow.keras.layers からインポート Dense、Dropout、Flatten、Conv2D、MaxPool2D、BatchNormalizationtensorflow.keras.optimizersからAdamをインポートしますtensorflowをtfとしてインポートするsnsとしてseabornをインポートする

ANN と CNN に関するコンテンツを一から探索するための役立つリンクがいくつかあります。

異なるハイパーパラメーターを使用して 3 つの異なる CNN モデルを定義します。理想的には、現実の世界では、マルチカテゴリ分類タスクのモデルを構築していることを考慮して、精度や関連するメトリクスを最大化するためにさまざまなアーキテクチャを実装することを目指しています。問題の種類の選択は、視覚化パッケージの使用方法には影響しません。

ユーザー定義関数を作成して、異なる数の CNN レイヤー、最大プーリング、および高密度レイヤーを使用して 3 つの異なるモデルを個別に構築しました。

4.1 – アーキテクチャ 1 – 浅い CNN レイヤー + ANN レイヤー

def 構築_モデル():モデル = シーケンシャル()model.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 1), activity='relu'))model.add(Conv2D(filters=64, kernel_size=(3, 3),activation='relu'))model.add(MaxPool2D((2, 2)))model.add(Flatten())model.add(Dense(256,activation='relu'))model.add(Dense(12,activation='softmax'))model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])リターンモデル

4.2 — アーキテクチャ 2 — 深い CNN + 浅い ANN レイヤー

def sconstruct_model():smodel = シーケンシャル()smodel.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 3), activity='relu'))smodel.add(Conv2D(filters=64, kernel_size=(3, 3),activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3),activation='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3),activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3),activation='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3),activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(フラット化())smodel.add(Dense(256,activation='relu'))smodel.add(Dense(12,activation='softmax'))#optimizer = アダム(lr=0.001)smodel.compile(loss='categorical_crossentropy'、optimizer='adam'、metrics=['accuracy'])#model.summary()Sモデルを返す

4.3 — アーキテクチャ 3 — 深い CNN および ANN レイヤー

def cconstruct_model(learningRate):smodel = シーケンシャル()smodel.add(Conv2D(filters=32, kernel_size=(3, 3), input_shape=(128, 128, 1), activity='relu'))smodel.add(Conv2D(filters=32, kernel_size=(3, 3),activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=64, kernel_size=(3, 3),activation='relu'))smodel.add(Conv2D(filters=64, kernel_size=(3, 3),activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3),activation='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3),activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(フラット化())smodel.add(Dense(256,activation='relu'))smodel.add(Dense(256,activation='relu'))smodel.add(Dense(12,activation='softmax'))オプティマイザー = アダム(lr=学習率)smodel.compile(loss='categorical_crossentropy', optimizer=オプティマイザー, metrics=['accuracy'])smodel.summary()Sモデルを返すモデル=cconstruct_model(0.001)

ANN Visualizer という名前の Python モジュールを使用すると、数行のコードで人工ニューラル ネットワークを視覚化できます (Gheorghiu、2022)。 Keras と Python の Graphviz モジュールを使用して、整然とした魅力的なニューラル ネットワーク グラフを生成します。深層学習ネットワーク全体を視覚化することも、深層学習の進歩によって作成した畳み込みニューラル ネットワークのみを視覚化することもできる柔軟性があります (Shah、2018)。

ニューラル ネットワークの PDF 表現を生成するには、以下の構造を使用します。ただし、その前に、上記のモデルをコンパイルする必要があります。

モデル=construct_model()

ann_viz(モデル、ビュー=True、ファイル名=”network.gv”、タイトル=”MyNeural Network”)

  • モデル - Keras のシーケンシャル モデル
  • ビュー - ann_viz() が呼び出された後のグラフを視覚化する
  • ファイル名 - ファイルの名前
  • 題名 - グラフを示す特定のタイトル
ann_visualizer.visualize から ann_viz をインポートann_viz(model, view=True, filename=”cconstruct_model”, title=”CNN — モデル 1 — シンプルなアーキテクチャ”)
図1: ANN Visualizerを使用して作成されたconstruct_model()のスナップショット。クレジット — Jupyter Notebook を使用して著者が開発した画像。元の出力は大きすぎてここに画像として収まらないため、ここでは最下位レイヤーのスナップショットが使用されます。

Visualkeras と呼ばれる Python ツールを使用すると、Keras ニューラル ネットワーク設計を (個別に、または TensorFlow の一部として) 簡単に確認できます。スタイリングのニーズの大部分を簡単に満たすことができます。畳み込みニューラル ネットワーク (CNN) は、階層型アーキテクチャの開発から大きな恩恵を受けます。単純なフィードフォワード ネットワークを含むほとんどのモデルは、このモジュールがサポートするグラフ スタイル アーキテクチャの生成から大きな恩恵を受けます (Gavrikov、2022)。

モデル1=construct_model()モデル2=sconstruct_model()モデル3=cconstruct_model(0.009)Visualkeras をインポートするPIL からのインポート ImageFontVisualkeras.layered_view(model1, legend=True)Visualkeras.layered_view(model2, legend=True)Visualkeras.layered_view(model3, legend=True)
図 2. XNUMX つの異なるモデル アーキテクチャを図で示します。クレジット — Jupyter Notebook を使用して著者が開発した画像。

  keras.utils.plot_model Graphviz および pydot パッケージを使用して、Keras を通じて定義およびコンパイルされたモデルをプロットするための組み込み関数を提供します。これは、上で使用したパッケージよりもグラフィカルに直感的ではありませんが、シーケンシャル モデル (チーム、nd) の基本アーキテクチャの概要を示しています。

tf.keras.utils.plot_model(モデル1、to_file="モデル.png",show_shapes=真、show_dtype=False、show_layer_names=真、ランクディレクトリ = "TB"、Expand_nested=真、dpi=96、layer_range=なし、show_layer_activations=True、)

考慮すべきハイパーパラメータはいくつかあります。

  1. モデル: Keras でコンパイルされたモデルまたはモデル オブジェクトのインスタンス
  2. ファイルへ: 画像のファイル名
  3. show_shapes: ニューラルネットワークの各層の寸法と形状を表示します
  4. show_layer_activation: ニューロン内で使用されるディスプレイ活性化関数
図 3. tf.keras.utils.plot_model() の出力を示します。クレジット — Jupyter Notebook を使用して著者が開発した画像。

TensorBoard は、ユーザーがさまざまなモデル実行にわたるログを視覚化できるようにするダッシュボード インターフェイスです。ログは、さまざまなエポックにわたる精度、再現率、RMSE、MAPE、MSE などのモデル検証尺度の追跡から、モデルのアーキテクチャの概念グラフの作成まで多岐にわたります。これは、運用レベルのグラフを使用してモデルをどのように変更できるかについて洞察を導きながら、意図したモデルが予想される設計と一致するかどうかを視覚化するための強力なツールです。

この機能を利用するには、まず TensorBoard をロードし、次にログ ディレクトリを作成する必要があります。

%load_ext テンソルボード日時からインポート日時tensorflowからインポートケラス# Keras TensorBoard コールバックを定義します。logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

Keras TensorBoard コールバックを作成し、トレーニング前にログ ディレクトリを指定します。このコールバックを model.fit() に指定することで、TensorBoard 視覚化のためにグラフ データが確実に記録されるようにすることができます。 TensorBoard を呼び出すと、ロードに数分かかる場合があります。

モデル.フィット(X2_train、Y2_train、batch_size = 64、エポック=5、コールバック=[tensorboard_callback])

注: X2_train と Y2_train は、上記のコードには反映されていないトレーニング データセットです。これを独自のトレーニング データに置き換えることができます。

TensorBoard はデフォルトで常に演算レベルのグラフを表示します。 (「Default」タグが左側で強調表示されています。) データは下から上に流れるため、グラフはコードと比べて上下逆になっています。しかし、ご覧のとおり、グラフは Keras モデルの説明にほぼ似ており、他の計算ノードにつながる追加のエッジがあります (Tensorflow、2022)。

図 4. TensorBoard の出力を示します。クレジット — Jupyter Notebook を使用して著者が開発した画像。

TensorBoard の使用方法の詳細については、「リファレンス」を参照してください。

ユーザーが利害関係者のグループに分析を提示する必要がある商業的な観点から見ると、これらの図は議論をさらに複雑にします。それらは極端な付加価値ではないかもしれません。ただし、学術的および学習の観点から見ると、これらのパッケージを利用して深層学習アーキテクチャを表示することにはメリットがあります。私にとって、ANN ビジュアライザは、ダイアグラムを理解しやすいため、他のビジュアライザよりも優れています。一方、TensorBoard のグラフ出力は、結果を利用する前にさらに専門的な知識が必要です。

ガブリコフ、P.(2022年13月XNUMX日)。 Keras / TensorFlow の Visualkeras。 GitHub。 https://github.com/paulgavrikov/visualkeras

ゲオルギュウ、T. (2022 年 21 月 XNUMX 日)。 ANNビジュアライザー。 GitHub。 https://github.com/RedaOps/ann-visualizer

シャー、A. (2018 年 28 月 XNUMX 日)。 わずか 1 行のコードで人工ニューラル ネットワーク (ANN) を視覚化。 中くらい。 https://towardsdatascience.com/visualizing-artificial-neural-networks-anns-with-just-one-line-of-code-b4233607209e

スタックオーバーフロー。 (nd)。 機械学習 — ニューラル ネットワーク アーキテクチャをどのように視覚化しますか? データ サイエンス スタック交換。 29 年 2022 月 XNUMX 日に取得、以下から https://datascience.stackexchange.com/questions/12851/how-do-you-visualize-neural-network-architectures

チーム、K.(nd)。 Keras ドキュメント: モデル プロット ユーティリティ。ケラスアイオ。 29 年 2022 月 XNUMX 日に取得、以下から https://keras.io/api/utils/model_plotting_utils/#modeltodot-function

テンソルフロー。 (2022年6月XNUMX日)。 TensorFlow グラフの検査 |テンソルボード。テンソルフロー。 https://www.tensorflow.org/tensorboard/graphs

Python でニューラル ネットワーク アーキテクチャを視覚化する方法 https://towardsdatascience.com/how-to-visualize-neural-network-architectures-in-python-567cd2aa6d62?source=rss—-7f60cf5620c9—4 ソースから再公開 https:// datascience.com/feed に向けて

<!–

–>

タイムスタンプ:

より多くの ブロックチェーンコンサルタント