我在 Mnist 数据上有一个带有 pytorch 的单层 lstm。我知道对于 pytorch 中的 lstm 的一层 lstm dropout 选项不起作用。所以,我在第二层的开头添加了一个退出,这是一个完全连接的层。然而,我观察到,在没有 dropout 的情况下,我在测试数据上获得了 97.75% 的准确率,而在 dropout 为 0.5 的情况下,我得到了 95.36%。我想问我是否做错了什么或者这种现象的原因是什么?我在测试中将其更改为 eval 模式,但我达到了 96.44% 的准确度。仍然比没有辍学的要少。非常感谢
# RNN Model (Many-to-One)
class RNN(nn.Module):
def __init__(self, input_size, hidden_size, num_layers, num_classes):
super(RNN, self).__init__()
self.hidden_size = hidden_size
self.num_layers = num_layers
self.lstm = nn.LSTM(input_size, hidden_size, num_layers,
batch_first=True,bidirectional=True)
self.fc = nn.Sequential(
nn.Dropout(0.1),
nn.Linear(hidden_size*2, num_classes),
nn.Softmax(dim=1)
)
def init_hidden(self,x):
return(Variable(torch.zeros(self.num_layers*2, x.size(0), self.hidden_size)).cuda(),
Variable(torch.zeros(self.num_layers*2, x.size(0), self.hidden_size).cuda()))
def forward(self, x):
# Set initial states
# Forward propagate RNN
hidden = self.init_hidden(x)
#print(len(hidden))
out, _ = self.lstm(x, hidden)
# Decode hidden state of last time step
out = self.fc(out[:, -1, :])
return out