Hello there,
Currently I’ve been working on my thesis for video classification, I use CNN as feature extractor and use the output from cnn (-1) as input on RNN.
This is my code for RNN
num_classes = 2
input_size = 2048
hidden_size = 128
batch_size = 1
num_layers = 2
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
self.rnn = nn.GRU(input_size=input_size, num_layers=num_layers, hidden_size=hidden_size, batch_first=True, dropout=1)
self.fc = nn.Linear(hidden_size, num_classes)
def forward(self, embedded, seq_len):
hidden = self.init_hidden(seq_len)
# Pack them up nicely
embedded = embedded.view(seq_len, batch_size, input_size)
# propagate input through RNN
out, hidden = self.rnn(embedded, hidden)
out = self.fc(out[-1])
if use_gpu:
out = out.cuda()
return out
def init_hidden(self, seq_len):
if use_gpu:
return Variable(torch.zeros(num_layers, seq_len, hidden_size), requires_grad=True).cuda()
return Variable(torch.zeros(num_layers, seq_len, hidden_size), requires_grad=True)
The code run well but I got ugly result.
On the train data it successfully to predict on two category, however it predicts only last category on test data. Here’s the log on the training process
train Loss: 0.6007287226361679 Acc: 0.7712418300653595 category1 corrects: 157 category2 corrects: 79
test Loss: 1.1236150416044088 Acc: 0.5384615384615384 category1 corrects: 0 category2 corrects: 35
train Loss: 0.7298363817283531 Acc: 0.6209150326797386 category1 corrects: 94 category2 corrects: 96
test Loss: 0.8569914045242163 Acc: 0.5384615384615384 category1 corrects: 0 category2 corrects: 35
train Loss: 0.7280107533522681 Acc: 0.5751633986928104 category1 corrects: 83 category2 corrects: 93
test Loss: 0.765527761899508 Acc: 0.5384615384615384 category1 corrects: 0 category2 corrects: 35
train Loss: 0.7309918669508952 Acc: 0.5228758169934641 category1 corrects: 73 category2 corrects: 87
test Loss: 0.7198472220164079 Acc: 0.5384615384615384 category1 corrects: 0 category2 corrects: 35
train Loss: 0.723503941901369 Acc: 0.48366013071895425 category1 corrects: 69 category2 corrects: 79
test Loss: 0.7001942808811481 Acc: 0.5384615384615384 category1 corrects: 0 category2 corrects: 35
I dont know why my rnn never predict well on category1 (corrects always 0).
My dataset is likely small, 150 for training and 35 for testing.
I would be happy if someone here help me solve this issue
Thanks.