初窥pytorch

该文章演示了如何使用PyTorch构建并训练一个一元线性回归模型,通过nn.Linear模块拟合数据点,采用MSELoss作为损失函数,并使用SGD优化器调整模型参数,最终得出直线的权重和偏置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用pytorch实现一个直线的拟合模型,具体参数介绍等见注释

import torch

x_data = torch.tensor([[1.0], [2.0], [3.0], [4.0]])
y_data = torch.tensor([[3.0], [5.0], [7.0], [9.0]])


class LinearModel(torch.nn.Module):
    def __init__(self):
        super(LinearModel, self).__init__()
        # 这里的参数1, 1指的是线性层的输入和输出维度。torch.nn.Linear()函数的第一个参数是输入维度,第二个参数是输出维度。在这个代码中,
        # 输入数据x的维度为1,输出数据y的维度也为1,因此使用torch.nn.Linear(1, 1)创建了一个输入维度为1,输出维度为1的线性层。
        # 这个线性层的作用是将输入数据x映射到输出数据y,即y = wx + b,其中w是线性层的权重,b是线性层的偏置。在模型训练过程中,模型会自动学习到最优的权重和偏置,使得模型能够更好地拟合数据。
        self.linear = torch.nn.Linear(1, 1)

    def forward(self, x):
        # self.linear(x)是在进行线性变换,即将输入数据x通过线性层进行映射,得到输出数据y_pred。在这个代码中,self.linear是一个torch.nn.Linear对象,
        # 它包含了一个权重矩阵和一个偏置向量,这些参数会在模型训练过程中自动学习到最优值。当输入数据x传入self.linear(x)时,线性层会将x与权重矩阵相乘,
        # 再加上偏置向量,得到输出数据y_pred。具体来说,y_pred = self.linear(x)的计算过程为:y_pred = x * w + b,
        # 其中x是输入数据,w是权重矩阵,b是偏置向量。这个线性变换是线性回归模型的核心部分,它将输入数据x映射到输出数据y_pred,用于拟合输入数据和对应的输出数据。
        y_pred = self.linear(x)
        return y_pred


model = LinearModel()

criterion = torch.nn.MSELoss(size_average=False)
# optimizer = torch.optim.SGD(model.parameters(), lr=0.01)是在定义优化器,即随机梯度下降优化器。在这个代码中,
# 使用了torch.optim.SGD()函数创建了一个随机梯度下降优化器,它的作用是根据损失函数的梯度来更新模型参数,使得模型能够更好地拟合数据。
# 具体来说,SGD优化器会根据损失函数的梯度对模型参数进行更新,更新公式为:θ = θ - lr * ∇L(θ),其中θ表示模型参数,lr表示学习率,∇L(θ)表示损失函数关于模型参数的梯度。
# 在这个代码中,使用了model.parameters()来获取模型的所有参数,
# 然后将其传入SGD优化器中,使得优化器能够更新模型的所有参数。同时,lr=0.01表示学习率为0.01,它控制了每次参数更新的步长,过大或过小的学习率都会影响模型的训练效果。
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

for epoch in range(1000):
    # 对x_data的每个值求出y hat,这里的y_pred对应x中每个值计算后的value
    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([[5.0]])
y_test = model(x_test)

print('y_pred=', y_test.data)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值