代码
# 调用库
import torch
# 数据准备
x_data = torch.Tensor([[1.0], [2.0], [3.0]]) # 训练集输入值
y_data = torch.Tensor([[2.0], [4.0], [6.0]]) # 训练集输出值
# 定义线性回归模型
class LinearModel(torch.nn.Module):
def __init__(self):
super(LinearModel, self).__init__() # 调用父类构造函数
self.linear = torch.nn.Linear(1, 1) # 实例化torch库nn模块的Linear类
def forward(self, x):
"""
前馈运算
:param x: 输入值
:return: 线性回归预测结果
"""
y_pred = self.linear(x)
return y_pred
model = LinearModel() # 实例化LinearModel类
criterion = torch.nn.MSELoss(size_average=False) # 损失函数
optimizer = torch.optim.SGD(model.parameters(), lr=0.01) # 优化器——梯度下降SGD
# optimizer = torch.optim.Adam(model.parameters(), lr=0.01) # 优化器——Adam
# optimizer = torch.optim.Adamax(model.parameters(), lr=0.01) # 优化器——Adamax
# 训练过程
for epoch in range(1000): # epoch:训练轮次
y_pred = model(x_data)
loss = criterion(y_pred, y_data)
print(epoch, loss.item())
optimizer.zero_grad() # 梯度归零
loss.backward() # 反向传播
optimizer.step() # 权重自动更新
print("w = ", model.linear.weight.item())
print("b = ", model.linear.bias.item())
# 预测过程
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print("y_pred = ", y_test.data)
结果
1 不同epoch结果
1.1 epoch = 100时
1.2 epoch = 1000时
2 不同优化器
2.1 Adam优化器
2.2 Adamax优化器
3 不同学习率(梯度下降)
3.1 lr = 0.05
3.2 lr = 0.1(loss函数结果发散)
遇见的问题
1 代码问题(已解决)
1.1 问题
1.2 解决办法
2 关于神经网络
代码中model.parameters()函数保存的是Weights和Bais参数的值。但是对于其他网络(非线性)来说这个函数可以用吗,里面也是保存的w和b吗?