Before I get to my issue, just wanted to say thank you for PyTorch. I think the library is clean and code is easy to follow.
I’m trying to replicate a part of this model https://github.com/harvardnlp/sent-conv-torch/blob/master/model/convNN.lua. I think I doing the concat part wrong, where the output from three different CNNs are combined (Torch version uses JoinTable). Although I’m not getting any error, the
loss.backward() takes forever to run. I really new to both Torch and PyTorch, any help would be much appreciated. Is there something wrong with the way I’ve defined my model ?
class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.embed = nn.Embedding(vocab.size(), 300) #self.embed.weight = Parameter( torch.from_numpy(vocab.get_weights().astype(np.float32))) self.conv_3 = nn.Conv2d(1, 50, kernel_size=(3, 300),stride=(1,1)) self.conv_4 = nn.Conv2d(1, 50, kernel_size=(4, 300),stride=(1,1)) self.conv_5 = nn.Conv2d(1, 50, kernel_size=(5, 300),stride=(1,1)) self.decoder = nn.Linear(50 * 3, len(labels)) def forward(self, x): e1 = self.embed(x) x = F.dropout(e1, p=0.2) x = e1.view(x.size(), 1, 50, 300) cnn_3 = F.relu(F.max_pool2d(self.conv_3(x), (maxlen - 3 + 1, 1))) cnn_4 = F.relu(F.max_pool2d(self.conv_4(x), (maxlen - 4 + 1, 1))) cnn_5 = F.relu(F.max_pool2d(self.conv_5(x), (maxlen - 5 + 1, 1))) x = torch.cat([e.unsqueeze(0) for e in [cnn_3, cnn_4, cnn_5]]) x = x.view(-1, 50 * 3) return F.log_softmax(self.decoder(F.dropout(x, p=0.2)))