如何在LSTM中添加dropout层以避免过拟合



在实现混合量子LSTM模型时,模型存在过拟合的问题,精度较低。我尝试在nn.LSTM中设置dropout = 1,但没有改善。我只使用了一个隐藏层。如何添加dropout层来减少过拟合?

模型参数:

input_dim = 16
hidden_dim = 100
layer_dim = 1
output_dim = 1

模型类:

class LSTMModel(nn.Module):
def __init__(self, input_dim, hidden_dim, layer_dim, output_dim):
super(LSTMModel, self).__init__()
self.hidden_dim = hidden_dim

self.layer_dim = layer_dim
self.lstm = nn.LSTM(input_dim, hidden_dim, layer_dim, dropout=1, batch_first=True, )

self.fc = nn.Linear(hidden_dim, output_dim)
self.hybrid = Hybrid(qiskit.Aer.get_backend('qasm_simulator'), 100, np.pi / 2)
def forward(self, x):
h0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_()
c0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_()

x, (hn, cn) = self.lstm(x, (h0.detach(), c0.detach()))

x = self.fc(x[:, -1, :]) 
x = self.hybrid(x)
return T.cat((x, 1 - x), -1)    

Pytorch的LSTM层将dropout参数作为该层的节点被归零的概率。当你通过1时,整个层就归零了。我想你是想让它成为一个常规的值,比如0.3或0.5。

正如@ayandas上面所说的,它将dropout应用于每一层,除了最后一层(参见上面的链接),所以它不适用于单层LSTM。你总是可以使用nn应用你自己的dropout。如果您愿意,可以在LSTM层的输出处退出。

最新更新