深度学习之用PyTorch实现线性回归

代码

# 调用库
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时

深度学习之用PyTorch实现线性回归_第1张图片

1.2 epoch = 1000时

深度学习之用PyTorch实现线性回归_第2张图片

 

 2 不同优化器

2.1 Adam优化器

深度学习之用PyTorch实现线性回归_第3张图片 

 2.2 Adamax优化器 

深度学习之用PyTorch实现线性回归_第4张图片

 

3 不同学习率(梯度下降)

3.1 lr = 0.05

深度学习之用PyTorch实现线性回归_第5张图片

 3.2 lr = 0.1(loss函数结果发散)

深度学习之用PyTorch实现线性回归_第6张图片

遇见的问题

1 代码问题(已解决)

1.1 问题

深度学习之用PyTorch实现线性回归_第7张图片

 1.2 解决办法

深度学习之用PyTorch实现线性回归_第8张图片

 2 关于神经网络

代码中model.parameters()函数保存的是Weights和Bais参数的值。但是对于其他网络(非线性)来说这个函数可以用吗,里面也是保存的w和b吗?

你可能感兴趣的:(pytorch,深度学习,python)