基于pytorch的lstm训练寻找最优参数代码,保存最优参数代码,打印优化学习率
时间: 2024-04-29 10:23:54 浏览: 7
以下是基于PyTorch的LSTM训练寻找最优参数代码,保存最优参数代码以及打印优化学习率的示例:
```python
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
# 定义数据集
x = torch.randn(100, 10, 5)
y = torch.randint(0, 2, (100,))
# 定义模型
class LSTMModel(nn.Module):
def __init__(self, input_size, hidden_size, num_layers, num_classes):
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, num_classes)
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
# 定义超参数
input_size = 5
hidden_size = 16
num_layers = 2
num_classes = 2
batch_size = 32
learning_rate = 0.01
num_epochs = 10
# 定义数据加载器
dataset = TensorDataset(x, y)
dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True)
# 定义模型、损失函数和优化器
model = LSTMModel(input_size, hidden_size, num_layers, num_classes)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)
# 训练模型
best_acc = 0.0
for epoch in range(num_epochs):
for i, (inputs, targets) in enumerate(dataloader):
inputs = inputs.to(torch.float32)
targets = targets.to(torch.long)
# 前向传播
outputs = model(inputs)
loss = criterion(outputs, targets)
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 评估模型
with torch.no_grad():
total = 0
correct = 0
for inputs, targets in dataloader:
inputs = inputs.to(torch.float32)
targets = targets.to(torch.long)
outputs = model(inputs)
_, predicted = torch.max(outputs.data, 1)
total += targets.size(0)
correct += (predicted == targets).sum().item()
acc = 100 * correct / total
print('Epoch [{}/{}], Accuracy: {:.2f}%'.format(epoch+1, num_epochs, acc))
# 保存最优参数
if acc > best_acc:
best_acc = acc
torch.save(model.state_dict(), 'best_model.pth')
# 打印优化学习率
print('Optimizer learning rate:', optimizer.param_groups[0]['lr'])
```
在上面的示例中,我们首先定义了一个数据集,然后定义了一个LSTM模型,接着定义了超参数、数据加载器、损失函数和优化器。在训练过程中,我们每个epoch都循环数据集,并进行前向传播、损失计算、反向传播和优化。在每个epoch之后,我们评估模型的准确率,并保存最优参数。最后,我们打印出优化器的学习率。
请注意,这只是一个示例,实际情况下您可能需要根据您的具体需求进行修改。