CNNを使用して テキスト分類モデル を実装しようとしています。私の知る限り、テキストデータには、1d畳み込みを使用する必要があります。 Conv2dを使用したpytorchの例を見ましたが、テキストにConv1dを適用する方法を知りたいですか?または、それは実際には不可能ですか?
これが私のモデルシナリオです:
Number of in-channels: 1, Number of out-channels: 128
Kernel size : 3 (only want to consider trigrams)
Batch size : 16
そこで、形状のテンソル<16、1、28、300>を提供します。ここで、28は文の長さです。長さ26の128個の特徴マップを提供するConv1dを使用したいと思います(トリグラムを検討しているため)。
この設定でnn.Conv1d()を定義する方法がわかりません。 Conv2dを使用できますが、Conv1dを使用して同じことを実現できるかどうかを知りたいですか?
この 例 RNNへのConv1dレイヤーとPool1dレイヤーの問題は、私の問題を解決しました。
したがって、次のようにnn.Conv1d
を使用する場合、埋め込み次元をチャネル内の数と見なす必要があります。
m = nn.Conv1d(200, 10, 2) # in-channels = 200, out-channels = 10
input = Variable(torch.randn(10, 200, 5)) # 200 = embedding dim, 5 = seq length
feature_maps = m(input)
print(feature_maps.size()) # feature_maps size = 10,10,4
私はテキストデータを処理しませんが、現在の形式の入力テンソルはconv2dを使用してのみ機能します。 conv1dを使用する1つの可能な方法は、埋め込みを形状のテンソルに連結することです。 <16,1,28 * 300>。 view
Inpytorchを使用して入力の形状を変更できます。