TextCNN--評判分析
次元の畳み込みニューラルネットワークに関連付けられた隣接するワードとの間に捕捉することができるテキスト次元画像、など。
これは、1次元コンボリューション層を働きます
⼆サンプル層⼀、⼀次元畳み込み層を有する二次元畳み込みを相互相関演算は、一次元を使用するように。二次元相互相関演算⼀では、左端のウィンドウコネクタ⽅START入力アレイから畳み込みを開始し、左から右への順序は、順次START入力アレイ上にスライドします。畳み込み窓コネクタが位置までスライドさせると⼀、STARTサブメニューアレイ入力窓および出力の数を与えるために合計乗算することにより、コア-コネクタアレイ素子群の位置に対応する要素を。
1 DEF (X、K)corr1d: 2 = W K.shape [0] 3 Y = torch.zeros((X.shape [0] - 1 + W )) 4 のための I における範囲(Y.shape [0] ): 5 Y [I] =(X [I:I + W] * K).SUM() 6 リターンY 7 8 #测试 9 X、K = torch.tensor([0、1、2、3、4 、5、6])、torch.tensor([1、2 ]) 10 corr1d(X、K) #1 出力:テンソル([2、5、8、11、14、17])
マルチチャンネル入力START⼀次元相互相関演算は、マルチチャンネル⼆同様の次元の相互相関演算を開始するために入力される各チャンネルに、コアと対応する出力STARTは、チャネル間の⼀次元相互相関計算を行うと出力を加算して得られた結果。
1 DEF corr1d_multi_in(X、K): 2つの #第一ループ及びX次元に沿って一次元相互相関結果を算出し、K 0(チャネル寸法)は、すべての結果は、二次元の蓄積に沿って積層されている0 。3 リターン torch.stack ([corr1d(X、K)のための X、K に ZIP(X、K)])。SUM(薄暗い= 0) 。4 。5 #テスト 。6 X-torch.tensor =([0,1,2,3,4 、5,6 ]、 7 [1,2,3,4,5,6,7 ]、 8 [2,3,4,5,6,7,8 ]) 。9 K = torch.tensor([ 。1,2]、[3 ,. 4]、[-1、-3 ]) 10 corr1d_multi_in(X、K) #1 出力:テンソル([2、8、14 A、20 A、26 A、32。 ])
最大のプール層をタイミング
、と仮定START入力は、複数のチャネルを備え、異なる時間ステップにおける組成上の値によって各チャンネル:textCNN最大(MAX-経時プール)からプールしたタイミング操作を使用して、実際の層はグローバルプール層の最大寸法である⼀対応します各チャンネルの出力、すなわち、チャネルは、すべての時間ステップ値の中で最大です。したがって、細胞膜のタイミングは、時間の最大数は異なっていてもよく、各チャネル上のSTART入力ステップです。タイミングが主な目的地の時間の最大のプールがタイミング機能をつかむために᯿最もであるので、それは通常の文字を追加するために顔の効果をモデル化することはできません。
1 クラスGlobalMaxPool1d(nn.Module): 2 DEF __init__ (自己): 3 スーパー(GlobalMaxPool1d、自己)。__init__ () 4 DEF フォワード(自己、X): 5 #X形状:(BATCH_SIZE、チャネル、seq_len) 6 リターン F.max_pool1d(X、kernel_size = x.shape [2]) #1 形状:(BATCH_SIZE、チャネル、1 )
TextCNNモデル
モデルtextCNNメイン⼀次元コンボリューション層とタイミング層を使用することで最大のプールです。テキストは、次元表現を使用して、各単語の単語ベクトルからなる単語のSTART入力シーケンスと仮定する。次いで、サンプル入力START、ADVANCED 1の幅は、チャンネル番号を入力STARTです。計算textCNNは慣れるには、次のステップに分かれて。
1⼀複数の定義次元の畳み込みコア、及び畳み込みDOの畳み込み演算をチェックするためにこれらを使用することは、入力STARTあります。異なる幅の畳み込みカーネルは、隣接する単語の異なる数の関連性を捕捉することができます。
2.全てのチャンネルの出力がタイミングを作るためにプールされ、次いでベクターに接続され、これらのチャネルの出力をプールし、最大です。
完全なベクターによるリンク層接続した後、3は、関連する出力のためにそれぞれのカテゴリを変換します。この⼀ステップは、オーバーフィッティングに対処するために廃棄された層を使用することができます。
1 クラスTextCNN(nn.Module): 2 DEF __init__ (セルフ、語彙、embed_size、kernel_sizes、NUM_CHANNELS) 。3 。スーパー(TextCNN、自己)__init__ () 4。 self.embedding = nn.Embedding(LEN(語彙)、embed_size ) 5 #は、埋め込み層のトレーニングに関与しない 。6 self.constant_embedding = nn.Embedding)、embed_sizeを((語彙LEN) 。7 self.dropout nn.Dropout =(0.5 ) 。8 self.decoder nn.Linear =(SUM(NUM_CHANNELS) 2 ) 9 #のタイミングは、最大細胞層の重みはない、一例で共有することが可能である 10 self.pool =をGlobalMaxPool1d() 11。 self.convs nn.ModuleList =() #は一次元畳み込み層を複数作成し 12である ため、C、K に(kernel_sizes、NUM_CHANNELS)ZIP: 13である self.convs.append(nn.Conv1d(in_channels = 2 * embed_size、 14 out_channels = C、 15 kernel_size = K)) 16 17。 DEF フォワード(セルフ、入力): 18であり、 #は2つの形状(埋め込み層によるバッチサイズ、ワード数、ワードベクトルの次元)の出力はワードベクトルに接続されているであろう 19の 埋め込み= torch.cat(( 20である )(入力をself.embedding、 21である (入力))、薄暗い= 2)self.constant_embedding #(BATCH_SIZE、seq_lenをembed_size * 2) 22は、 #、入力フォーマットConv1d請求ワードベクトルの次元、すなわちチャネル次元前の層の一次元畳み込みに変換します寸法 23は、 埋め込みembeddings.permute =(0、2、1 ) 24 #最大プール形状(バッチサイズ、チャネルのサイズ、1)取得するのタイミングの後、各一次元畳み込み層 25 #テンソルのを。使用平坦機能最後の次元を除去するために、次に接続チャネル寸法 26である 符号化torch.cat =([self.pool(F.relu(CONV(すなわち)))。スクイーズを(-1)埋め込むため CONV に self.convs] = 1薄暗い) 27 位出力完全に接続された層を得るための方法を適用した後に廃棄使用して 28を 出力= (self.dropout(符号化)self.decoder) 29 リターン出力 30 31 embed_sizeは、nums_channels = 100、[3、4、5]、[100、100、100、kernel_sizes ] 32ネット= TextCNN(単語、embed_size、kernel_sizes、nums_channels)
OK、「ハンズオン深い学習を学ぶ」この本をから、上記のすべてのモデルに関する記録。