2017-05-27 7 views
2

Ich versuche, eine text classification model mit CNN zu implementieren. Soweit ich weiß, sollten wir für Textdaten 1d Convolution verwenden. Ich habe ein Beispiel in Pytorch mit Conv2d gesehen, aber ich möchte wissen, wie ich Conv1d für Text anwenden kann? Oder ist es eigentlich nicht möglich?Convolutional NN für Texteingabe in PyTorch

Hier ist mein Modellszenario:

Number of in-channels: 1, Number of out-channels: 128 
Kernel size : 3 (only want to consider trigrams) 
Batch size : 16 

So werde ich Tensoren Form liefern, < 16, 1, 28, 300>, wobei 28 die Länge eines Satzes ist. Ich möchte Conv1d verwenden, das mir 128 Feature-Maps der Länge 26 geben wird (wenn ich über Trigramme nachdenke).

Ich bin mir nicht sicher, wie man für diese Einstellung nn.Conv1d() definiert. Ich kann Conv2d verwenden, möchte aber wissen, ob es möglich ist, dasselbe mit Conv1d zu erreichen?

+0

Woher kommt die 300? –

+0

300 ist die Einbettungsdimension. –

Antwort

1

Diese example von Conv1d und Pool1d Schichten in eine RNN gelöst mein Problem.

Also muss ich die Einbettungsdimension als die Anzahl der In-Kanäle betrachten, während nn.Conv1d wie folgt verwendet.

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 
0

Obwohl ich nicht mit Textdaten arbeite, würde der Eingangstensor in seiner aktuellen Form nur mit conv2d arbeiten. Eine mögliche Art, conv1d zu verwenden, wäre es, die Einbettungen in einem Tensor mit einer Form zu verketten, z. < 16,1,28 * 300>. Sie können die Eingabe mit view In pytorch umformen.

Verwandte Themen