pytorch中使用Adam优化器,画出损失随学习率变化的折线图,代码演示
时间: 2023-06-07 10:07:57 浏览: 136
好的,关于您的问题,以下是代码演示:
```
import matplotlib.pyplot as plt
import torch
import torch.nn as nn
import torch.optim as optim
# 定义模型
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
self.fc1 = nn.Linear(10, 5)
self.fc2 = nn.Linear(5, 2)
self.relu = nn.ReLU()
def forward(self, x):
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
# 初始化模型和数据
model = Model()
criterion = nn.CrossEntropyLoss()
x = torch.randn(100, 10)
y = torch.LongTensor(100).random_(2)
# 定义学习率列表
learning_rates = [0.001, 0.003, 0.005, 0.01, 0.03, 0.05, 0.1, 0.3, 0.5, 1]
# 定义损失记录器
losses = []
# 循环训练不同的学习率
for lr in learning_rates:
optimizer = optim.Adam(model.parameters(), lr=lr) # 定义优化器
for i in range(100): # 进行100轮训练
optimizer.zero_grad()
output = model(x)
loss = criterion(output, y)
loss.backward()
optimizer.step()
losses.append(loss.item()) # 记录最后一次的损失值
# 绘制损失随学习率变化的折线图
plt.plot(learning_rates, losses)
plt.title('Loss vs Learning Rates')
plt.xlabel('Learning Rates')
plt.ylabel('Loss')
plt.show()
```
以上代码中,我们通过定义不同的学习率,在100轮训练后记录损失值,最后绘制出损失随学习率变化的折线图,以观察在不同学习率下模型训练情况。
希望这个代码演示能够满足您的需求,有任何疑问和问题欢迎再次咨询。
阅读全文