简介:PyTorch的`nn.Module`是神经网络模块的基类,用于构建神经网络模型。在PyTorch中,几乎所有的神经网络都是从`nn.Module`派生的。下面是一个使用`nn.Module`构建LSTM(长短期记忆)网络的例子:
PyTorch的nn.Module是神经网络模块的基类,用于构建神经网络模型。在PyTorch中,几乎所有的神经网络都是从nn.Module派生的。下面是一个使用nn.Module构建LSTM(长短期记忆)网络的例子:
import torchimport torch.nn as nnclass LSTM(nn.Module):def __init__(self, input_size, hidden_size, num_layers, output_size):super(LSTM, self).__init__()self.hidden_size = hidden_sizeself.num_layers = num_layersself.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)self.fc = nn.Linear(hidden_size, output_size)def forward(self, x):h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device) # hidden statec0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device) # cell stateout, _ = self.lstm(x, (h0, c0)) # out: tensor of shape (batch_size, seq_length, hidden_size)out = self.fc(out[:, -1, :])return out
在这个例子中,我们定义了一个名为LSTM的类,它继承了nn.Module。在__init__方法中,我们定义了LSTM网络的结构。我们使用nn.LSTM创建了一个LSTM层,并使用nn.Linear创建了一个全连接层。在forward方法中,我们定义了前向传播过程。我们使用初始的隐藏状态和细胞状态作为输入,并将输出保存在out变量中。最后,我们将最后一个时间步的隐藏状态传递给全连接层,并返回输出。
当我们创建一个LSTM模型实例时,需要指定输入维度、隐藏层维度、层数以及输出维度等超参数。这些参数可以帮助我们定制LSTM网络的特定要求。然后我们可以调用实例来训练或评估模型。例如:
model = LSTM(input_size=10, hidden_size=20, num_layers=2, output_size=1)
在这个例子中,我们创建了一个具有两层LSTM网络的实例。输入维度的值为10,隐藏层维度的值为20,层数的值为2,输出维度的值为1。现在我们可以使用这个实例来训练或评估模型了。例如,我们可以使用MSE损失函数和随机梯度下降优化器来训练模型:
criterion = nn.MSELoss()optimizer = torch.optim.SGD(model.parameters(), lr=0.01)