GitHubじゃ!Pythonじゃ!

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

XifengGuo

CapsNet-Keras – NIPS2017論文「Capsule間のダイナミックルーティング」におけるCapsNetのKeras実装 今、テストエラー= ..

投稿日:

NIPS2017論文「Capsule間のダイナミックルーティング」におけるCapsNetのKeras実装 今、テストエラー= 0.34%。

CapsNet-Keras

論文中のCapsNetのKeras実装:
Sara Sabour、Nicholas Frosst、Geoffrey E Hinton。 カプセル間のダイナミックルーティング。 NIPS 2017
現在のaverage test error = 0.34%およびbest test error = 0.30%

論文との違い:

  • decay factor = 0.9step = 1 epochの学習率減衰を使用し、
    紙は詳細なパラメータを与えていない(あるいは使っていない)のですか?
  • 50 epochs訓練の後にのみ、テストエラーを報告します。
    この論文では、図A.1に従って1250 epochs訓練を受けたと仮定します。 狂ったように聞こえる、多分私は誤解した。
  • 我々は、再構成損失としてMSE(mean squared error)を使用し、損失の係数は、 lam_recon=0.0005*784=0.392
    これは、論文のようにSSE(和二乗誤差)とlam_recon=0.0005を使用することと同等でなければなりません。

TODO

  • 他のデータセットについても実験を行います。
  • CapsuleNetの興味深い特徴を探る。

連絡先

  • レポへのあなたの貢献はいつでも歓迎します。 問題を開くか、私に電子メールで連絡してくださいguoxifeng1990@163.comまたはWeChat wenlong-guo

使用法

ステップ1. Keras> = 2.0.7TensorFlow> = 1.2バックエンドをインストールします。

pip install tensorflow-gpu
pip install keras

手順2.このリポジトリをローカルにクローンします。

git clone https://github.com/XifengGuo/CapsNet-Keras.git capsnet-keras
cd capsnet-keras

ステップ3. MNIST上のCapsNetを訓練する

デフォルト設定でのトレーニング:

python capsulenet.py

より詳細なヘルプの使用方法:

python capsulenet.py -h

ステップ4.事前に訓練されたCapsNetモデルをテストする

上記のコマンドを使用してモデルを訓練したとすると、訓練されたモデルはresult/trained_model.h5保存されます。 次に、次のコマンドを実行してテスト結果を取得します。

$ python capsulenet.py -t -w result/trained_model.h5

テスト精度を出力し、再構成された画像を表示します。 テストデータは検証データと同じです。 新しいデータをテストするのは簡単ですが、必要に応じてコードを変更するだけです。

また、 https://pan.baidu.com/s/1sldqQo1から訓練を受けたモデルをダウンロードすることもできます

ステップ5.複数のgpusを学習する

Keras>=2.0.9が必要です。 Kerasを更新した後:

python capsulenet-multi-gpu.py --gpus 2

50エポックの間、自動的にマルチGPUをトレーニングし、テストデータセットでパフォーマンスを出力します。 しかし、訓練中は、検証精度は報告されていません。

結果

テストエラー

MNISTのCapsNet分類テストエラー 平均および標準偏差の結果は、3つの試験によって報告される。 次のコマンドを実行すると、結果を再現できます。

python capsulenet.py --routings 1 --lam_recon 0.0    #CapsNet-v1   
python capsulenet.py --routings 1 --lam_recon 0.392  #CapsNet-v2
python capsulenet.py --routings 3 --lam_recon 0.0    #CapsNet-v3 
python capsulenet.py --routings 3 --lam_recon 0.392  #CapsNet-v4
方法 ルーティング 復興 MNIST(%)
ベースライン 0.39
CapsNet-v1 1 いいえ 0.39(0.024) 0.34(0.032)
CapsNet-v2 1 はい 0.36(0.009) 0.29(0.011)
CapsNet-v3 3 いいえ 0.40(0.016) 0.35(0.036)
CapsNet-v4 3 はい 0.34(0.016) 0.25(0.005)

損失と精度:

トレーニングスピード

1つのGTX 1070 GPUで約100s / epoch
1つのGTX 1080Ti GPUで約80s / epoch
capsulenet-multi-gpu.pyを使用して2つのGTX 1080Ti GPUで約55s / epoch

復興の結果

打ち上げによるCapsNet-v4の結果

python capsulenet.py -t -w result/trained_model.h5

上位5行の桁はMNISTからの実画像であり、下の桁は対応する再構成画像である。

潜在的なコードを操作する

python capsulenet.py -t --digit 5 -w result/trained_model.h5 

各桁について、 i番目の行はカプセルのi番目の次元に対応し、左から右の列は[-0.25, -0.2, -0.15, -0.1, -0.05, 0, 0.05, 0.1, 0.15, 0.2, 0.25]からカプセルの一次元の値まで増加する。

わかるように、各次元は数字のいくつかの特徴を捕らえています。 異なるディジットカプセルの同じ寸法は、異なる特性を表すことができる。 これは、異なる桁が異なる特徴ベクトル(桁カプセル)から再構成されるためである。 これらのベクターは、再構成中に相互に独立している。

その他の実装







-XifengGuo
-, , , , ,

執筆者: