利用Tensor和autograd来实现线性回归的训练

1. 导入pytorch库

import torch

2. 设定超参数

包括特征数量,训练的次数,学习率

input_size = 3

num_epochs = 60

learning_rate = 0.001

3. 随机生成训练数据

x_train 是一个形状为 [100, input_size] 的张量,代表着 100 个样本的特征值

y_train 的生成规则是对 x_train 的每一列分别乘以一定的权重并相加,然后加上一些随机噪声——torch.randn(100, output_size)

x_train = torch.randn(100, input_size)

y_train = 2 * x_train[:, 0] + 3 * x_train[:, 1] - 4 * x_train[:, 2] + 5 + torch.randn(100, output_size)

随机生成x_train,y_train

4. 初始化w,b

初始化了权重 w 和偏置 b。w 是一个形状为 [input_size, output_size] 的张量,b 是一个标量。将 requires_grad 设为 True,这两个张量在后续的计算中需要计算梯度。

w = torch.randn(input_size, output_size, requires_grad=True)

b = torch.randn(1, requires_grad=True)

随机初始化w,b

把w,b都设置为零向量的情况

w = torch.tensor([[0.0],[0.0],[0.0]], requires_grad=True)

b = torch.tensor(0.0, requires_grad=True)

初始化w,b为0


5.前向传播

进行了前向传播,计算了模型的输出和损失。通过矩阵乘法 mm 计算了 x_train 和 w 的乘积,然后加上偏置 b,得到了模型的输出。损失函数是平方误差函数,通过计算模型输出和真实值 y_train 的差的平方,然后求均值得到。

for epoch in range(num_epochs):

    outputs = x_train.mm(w) + b loss = torch.mean((outputs - y_train) ** 2)

6.梯度下降法更新w,b

使用梯度下降法,用学习率乘以对应的梯度,然后从原来的参数值中减去。然后将权重 w 和偏置 b 的梯度清零。在每5轮训练后,打印出了当前的损失值,观察训练过程中损失的变化情况。最后,打印出了训练完成后的权重 w 和偏置 b。调用了 detach() 方法,将 w 从计算图中分离出来,这样就不会计算它的梯度了。

loss.backward() 

with torch.no_grad():

    w -= learning_rate * w.grad

    b -= learning_rate * b.grad

    # 清零梯度

    w.grad.zero_()

    b.grad.zero_()

    if (epoch + 1) % 5 == 0:         

        print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch + 1, num_epochs, loss.item()))

print(f'Weights: {w.detach().numpy()}, Bias: {b.item()}')

结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值