操作pytorch进行深度学习的步骤和解释——以简单线性回归为例

python 复制代码
import torch

x_data = torch.Tensor([[1],[2],[3]])

y_data = torch.Tensor([[2],[4],[6]])

class LinearModel(torch.nn.Module):
    def __init__(self):
        super(LinearModel,self).__init__()
        self.linear = torch.nn.Linear(1,1)
    def forward(self,x):
        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)
losses = []
for epoch in range(1000):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    print(epoch,loss)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    losses.append(loss.item())


print('w=',model.linear.weight.item())
print('b=',model.linear.bias.item())

x_test = torch.Tensor([[4]])
y_test = model(x_test)
print('y_pred=',y_test.data)

导入PyTorch库,这是使用PyTorch进行深度学习所必需的。

python 复制代码
x_data = torch.Tensor([[1],[2],[3]])

创建一个包含三个样本的二维张量**x_data**,每个样本是一个一维张量,代表模型的输入特征。

python 复制代码
y_data = torch.Tensor([[2],[4],[6]])

创建一个包含三个样本的二维张量**y_data**,每个样本是一个一维张量,代表模型的输出目标值。

python 复制代码
class LinearModel(torch.nn.Module):

定义一个名为**LinearModel** 的类,它继承自torch.nn.Module,是构建任何神经网络模型的基础。

python 复制代码
def __init__(self):
    super(LinearModel,self).__init__() 
    self.linear = torch.nn.Linear(1,1)

在**LinearModel** 类的构造函数中,首先调用父类的构造函数。然后创建一个线性层**self.linear,** 它是一个一元线性模型,输入和输出特征的数量都是1输入的特征维度是1,输出特征维度也是1,这样就可让模型知道W和b的维度是多少。

python 复制代码
def forward(self,x): 
    y_pred = self.linear(x) 
    return y_pred

定义模型的前向传播函数。它接受输入x,通过线性层self.linear进行计算,得到预测输出y_pred,然后返回这个预测值。这个函数是必须存在的

python 复制代码
model = LinearModel()

实例化**LinearModel类**,创建模型对象。

python 复制代码
criterion = torch.nn.MSELoss(size_average=False)

创建一个均方误差损失函数**criterionsize_average=False**参数(即将被弃用)指定损失函数在计算时应累加所有样本的损失。size_average=False代表着损失,不用求均值。

python 复制代码
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)

创建一个随机梯度下降**(SGD** )优化器**optimizer**,用于更新模型的参数。学习率设置为0.01。

python 复制代码
losses = []

初始化一个空列表**losses**,用于存储训练过程中的每一轮损失值。

python 复制代码
for epoch in range(1000):

开始一个训练循环,总共训练1000个epoch(轮次)。

python 复制代码
y_pred = model(x_data)

在每个epoch中,计算模型对输入数据x_data的预测输出y_pred

python 复制代码
loss = criterion(y_pred,y_data)

计算预测输出y_pred和目标值y_data之间的损失。

python 复制代码
print(epoch,loss)

打印当前epoch和对应的损失值。

python 复制代码
optimizer.zero_grad()

在每次参数更新前,清空过往梯度。

python 复制代码
loss.backward()

对损失函数进行反向传播,计算模型参数的梯度。

python 复制代码
optimizer.step()

根据计算得到的梯度,使用优化器更新模型的参数。

python 复制代码
losses.append(loss.item())

将当前epoch的损失值添加到losses列表中。

python 复制代码
print('w=',model.linear.weight.item())

打印模型中线性层的权重w

python 复制代码
print('b=',model.linear.bias.item())

打印模型中线性层的偏置b

python 复制代码
x_test = torch.Tensor([[4]])

创建一个新的输入张量x_test,用于测试模型。

python 复制代码
y_test = model(x_test)

使用训练好的模型对x_test进行预测,得到y_test

python 复制代码
print('y_pred=',y_test.data)

打印测试数据的预测输出y_pred

这个代码实现了一个简单的线性回归模型,并通过梯度下降方法训练模型参数。最后,它还打印了训练后的权重、偏置以及对新数据的预测结果。

相关推荐
胡耀超7 分钟前
标签体系设计与管理:从理论基础到智能化实践的综合指南
人工智能·python·深度学习·数据挖掘·大模型·用户画像·语义分析
fzyz1232 小时前
Windows系统下WSL从C盘迁移方案
人工智能·windows·深度学习·wsl
Yo_Becky3 小时前
【PyTorch】PyTorch预训练模型缓存位置迁移,也可拓展应用于其他文件的迁移
人工智能·pytorch·经验分享·笔记·python·程序人生·其他
xinxiangwangzhi_3 小时前
pytorch底层原理学习--PyTorch 架构梳理
人工智能·pytorch·架构
FF-Studio4 小时前
【硬核数学 · LLM篇】3.1 Transformer之心:自注意力机制的线性代数解构《从零构建机器学习、深度学习到LLM的数学认知》
人工智能·pytorch·深度学习·线性代数·机器学习·数学建模·transformer
云渚钓月梦未杳4 小时前
深度学习03 人工神经网络ANN
人工智能·深度学习
贾全5 小时前
第十章:HIL-SERL 真实机器人训练实战
人工智能·深度学习·算法·机器学习·机器人
我是小哪吒2.05 小时前
书籍推荐-《对抗机器学习:攻击面、防御机制与人工智能中的学习理论》
人工智能·深度学习·学习·机器学习·ai·语言模型·大模型
慕婉03075 小时前
深度学习前置知识全面解析:从机器学习到深度学习的进阶之路
人工智能·深度学习·机器学习
埃菲尔铁塔_CV算法8 小时前
基于 TOF 图像高频信息恢复 RGB 图像的原理、应用与实现
人工智能·深度学习·数码相机·算法·目标检测·计算机视觉