如何在 LSTM 中添加 dropout 层以避免过拟合
How to add a dropout layer in LSTM to avoid overfitting
在实施混合量子 LSTM 模型时,该模型过度拟合,因此精度较低。我尝试在 nn.LSTM
中设置 dropout = 1
但没有改善。我使用了一个隐藏层。如何添加 dropout 层来减少过拟合?
模型参数:
input_dim = 16
hidden_dim = 100
layer_dim = 1
output_dim = 1
型号class:
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 layer 将 dropout
参数作为 层的节点被清零的概率 。当你通过 1 时,它会将整个层清零。我假设您打算将其设置为常规值,例如 0.3 或 0.5。
正如@ayandas 上面所说,它也将 dropout 应用到每一层 除了最后一层 (参见上面的 link ),所以它不适用于单层 LSTM。如果您愿意,您始终可以在 LSTM 层的输出中使用 nn.dropout 应用自己的 dropout。
在实施混合量子 LSTM 模型时,该模型过度拟合,因此精度较低。我尝试在 nn.LSTM
中设置 dropout = 1
但没有改善。我使用了一个隐藏层。如何添加 dropout 层来减少过拟合?
模型参数:
input_dim = 16
hidden_dim = 100
layer_dim = 1
output_dim = 1
型号class:
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 layer 将 dropout
参数作为 层的节点被清零的概率 。当你通过 1 时,它会将整个层清零。我假设您打算将其设置为常规值,例如 0.3 或 0.5。
正如@ayandas 上面所说,它也将 dropout 应用到每一层 除了最后一层 (参见上面的 link ),所以它不适用于单层 LSTM。如果您愿意,您始终可以在 LSTM 层的输出中使用 nn.dropout 应用自己的 dropout。