用pytorch写lstm模型代码
时间: 2023-04-03 10:02:52 浏览: 128
可以,以下是一个简单的 PyTorch LSTM 模型的代码示例:
```python
import torch
import torch.nn as nn
class LSTMModel(nn.Module):
def __init__(self, input_size, hidden_size, num_layers, output_size):
super(LSTMModel, 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)
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)
c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device)
out, _ = self.lstm(x, (h0, c0))
out = self.fc(out[:, -1, :])
return out
```
这个模型接受一个输入张量 `x`,其形状为 `(batch_size, seq_len, input_size)`,其中 `batch_size` 是批大小,`seq_len` 是序列长度,`input_size` 是每个时间步的输入特征数。模型输出一个形状为 `(batch_size, output_size)` 的张量,其中 `output_size` 是输出特征数。
你可以使用这个模型来训练一个 LSTM 模型,例如:
```python
model = LSTMModel(input_size=10, hidden_size=20, num_layers=2, output_size=1)
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
# 训练模型
for epoch in range(num_epochs):
for i, (inputs, targets) in enumerate(train_loader):
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()
# 在验证集上测试模型
with torch.no_grad():
for inputs, targets in val_loader:
outputs = model(inputs)
val_loss = criterion(outputs, targets)
print(f"Epoch {epoch+1}, train loss: {loss.item():.4f}, val loss: {val_loss.item():.4f}")
```
在这个例子中,我们使用均方误差损失函数来训练模型,使用 Adam 优化器来更新模型参数。我们还使用了一个训练集和一个验证集来评估模型的性能。
阅读全文