Github#カプセルネットワークこれは、カプセル間の動的ルーティングのPyTorch実装/チュートリアルです。カプセルネットワークは、フィーチャをカプセルとして埋め込み、投票メカニズムを使用して次のカプセル層にルーティングするニューラルネットワークアーキテクチャです。他のモデルの実装とは異なり、モジュールだけでは一部の概念を理解するのが難しいため、サンプルを用意しています。データセットを分類するモデルの注釈付きコードです。コアモジュールの実装が格納されています。Jindongwang/Pytorch-Capsulenetを使って、論文に関する混乱を解消しました。これは、MNISTデータセットでカプセルネットワークをトレーニングするためのノートブックです。Module#スカッシュこれは、方程式で与えられる紙からの押しつぶし関数です。短いカプセルを縮小します。keepdims=True)#ゼロにならないように、∥sj​∥計算時にイプシロンを追加します。値が与えられ始め、トレーニングは失敗します。self.epsilon))#ルーティングアルゴリズムこれは、このホワイトペーパーで説明されているルーティングメカニズムです。モデルでは複数のルーティングレイヤーを使用できます。これは、sj​このレイヤーの計算と手順1で説明したルーティングアルゴリズムを組み合わせたものです。下のレイヤーのカプセルあたりのフィーチャ数です。このレイヤーでも同じです。ルーティングの反復回数で、r論文では以下のように表示されています。Squash()#Wij​これはウェイトマトリックスです。下位レイヤーの各カプセルをこのレイヤーの各カプセルにマッピングします。.これらは下層のカプセルです。torch.Tensor):#u^j∣i​=Wij​ui​ここではj、このレイヤーのカプセルのインデックスを作成し、下のレイヤー(前のレイヤー)のカプセルのインデックスに使用します。u)#bij​初期ロジットは、iカプセルと組み合わせるべき対数事前確率です。jこれらはゼロで初期化します。v#クラス存在によるマージンロス出力カプセルごとに個別のマージンロスが使用され、合計損失はそれらの合計になります。各出力カプセルの長さは、入力にクラスが存在する確率です。k各出力カプセルまたはクラスの損失は、Lk​=Tk​max(0,m+−∥vk​∥)2+λ(1−Tk​)max(0,∥vk​∥−m−)2Tk​1クラスが存在するかどうか、k0そうでない場合です。2番目の要素はクラスが存在する場合です。max(0,x)予測が極端になるのを防ぐために使用されます。m+0.9m−0.1新聞に掲載される予定で、掲載される予定です。λダウンウエイトは、トレーニングの初期段階ですべてのカプセルの長さが落ちるのを防ぐために使用されます。vj​は押しつぶされた出力カプセルです。n_features]。ラベルごとにカプセルがあります。ラベルで、形をしています[batch_size]。計算を並列化しました。