GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

raghakot

keras-vis – ケラス用ニューラルネットワーク可視化ツールキット

投稿日:

ケラス用ニューラルネットワーク可視化ツールキット https://raghakot.github.io/keras-vis

Keras Visualization Toolkit

keras-visは、訓練されたkerasニューラルネットモデルを視覚化してデバッグするための高度なツールキットです。 現在サポートされている可視化には、

  • アクティベーションの最大化
  • 顕著なマップ
  • クラス活性化マップ

すべての視覚化は、デフォルトでN次元画像入力をサポートしています。 つまり、モデルへのN-dim画像入力に一般化されます。

このツールキットは、クリーンで使いやすく拡張可能なインターフェースを備え、エネルギーの最小化問題として上記のすべてを一般化しています。 ‘channels_first’、 ‘channels_last’データ形式のtheanoとtensorflowバックエンドの両方と互換性があります。

クイックリンク

入門

画像の背景の問題では、目標はある損失関数を最小にする入力画像を生成することです。 画像の背景の問題を設定するのは簡単です。

加重損失関数を定義する

様々な有用な損失関数が損失で定義される。 カスタム損失関数は、 Loss.build_lossを実装することで定義できます。

from vis.losses import ActivationMaximization
from vis.regularizers import TotalVariation, LPNorm

filter_indices = [1, 2, 3]

# Tuple consists of (loss_function, weight)
# Add regularizers as needed.
losses = [
    (ActivationMaximization(keras_layer, filter_indices), 1),
    (LPNorm(model.input), 10),
    (TotalVariation(model.input), 10)
]

加重損失を最小限に抑えるようにオプティマイザを構成

自然に見える画像を生成するために、画像検索空間は正則化のペナルティを用いて制約される。 いくつかの一般的なレギュラーは、 レギュラーで定義されています。 ロス関数と同様に、カスタムの正規化子はLoss.build_lossを実装することで定義できます。

from vis.optimizer import Optimizer

optimizer = Optimizer(model.input, losses)
opt_img, grads, _ = optimizer.minimize()

さまざまなサポートされている視覚化の具体例はexamplesフォルダあります

インストール

  1. theanoまたはtensorflowバックエンドでケラスをインストールしてください。 このライブラリにはKeras> 2.0が必要です

  2. keras-visをインストールする

ソースから

sudo python setup.py install

PyPIパッケージ

sudo pip install keras-vis

視覚化

注:リンクは現在破損しており、ドキュメント全体が修正されています。 サンプルはサンプル/をご覧ください。

ニューラルネットはブラックボックスです。 近年、畳み込みネットワークを理解し視覚化するためのいくつかのアプローチが文献で開発されている。 彼らは私たちにブラックボックスに耳を傾け、誤分類を診断し、ネットワークが過大/過小評価されているかどうかを判断する方法を提供します。

誘導されたバックプロップは、他の成長するアプリケーションのリストの間にトリッピーアート 、神経/テクスチャスタイルの転送を作成するためにも使用できます。

それぞれのページで文書化されたさまざまな視覚化がここに要約されています。


コンバージョンフィルターの視覚化

畳み込みフィルタは、類似のテンプレートパターンが入力画像内に見つかった場合に出力を最大化する「テンプレートマッチング」フィルタを学習します。 アクティベーションの最大化によってこれらのテンプレートを視覚化します。


高密度層の可視化

ネットワークが過剰/不足か、一般化が適切かどうかをどのように評価できますか?


注目マップ

決定を下すために、ネットワークがイメージの一部を修正するために参加しているかどうかを評価するにはどうすればよいですか?


最適化の進捗状況をアニメーション化してGIFを生成する

コールバックを活用することで、最適化の進捗状況をアニメーション化してGIFを生成することができます 次の例は、 ‘ouzel’クラス(output_index:20)の活性化の最大化を視覚化する方法を示しています。

from vis.losses import ActivationMaximization
from vis.regularizers import TotalVariation, LPNorm
from vis.modifiers import Jitter
from vis.optimizer import Optimizer

from vis.callbacks import GifGenerator
from vis.utils.vggnet import VGG16

# Build the VGG16 network with ImageNet weights
model = VGG16(weights='imagenet', include_top=True)
print('Model loaded.')

# The name of the layer we want to visualize
# (see model definition in vggnet.py)
layer_name = 'predictions'
layer_dict = dict([(layer.name, layer) for layer in model.layers[1:]])
output_class = [20]

losses = [
    (ActivationMaximization(layer_dict[layer_name], output_class), 2),
    (LPNorm(model.input), 10),
    (TotalVariation(model.input), 10)
]
opt = Optimizer(model.input, losses)
opt.minimize(max_iter=500, verbose=True, image_modifiers=[Jitter()], callbacks=[GifGenerator('opt_progress')])

出力がどのように変化するのか注目してください。 これは、鮮明な活性化最大化画像を生成することが知られているImageModifierの一種であるJitterを使用したためです。 練習として、以下を試してください:

  • ジッタなし
  • 多様な損失ウェイト


引用

あなたの研究に役立つならば、あなたの出版物にkeras-visを挙げてください。 BibTeXエントリの例を次に示します。

@misc{raghakotkerasvis,
  title={keras-vis},
  author={Kotikalapudi, Raghavendra and contributors},
  year={2017},
  publisher={GitHub},
  howpublished={\url{https://github.com/raghakot/keras-vis}},
}







-raghakot
-, , , , , ,

執筆者: