使用pytorch实现线性回归(很基础模型搭建详解)

使用pytorch实现线性回归

步骤:

1.prepare dataset
2.design model using Class 目的是为了前向传播forward,即计算y hat(预测值)
3.Construct loss and optimizer (using pytorch API) 其中计算loss是为了进行反向传播,optimizer是为了更新梯度
4.Train Cycle
python 复制代码
import torch
python 复制代码
x_data = torch.Tensor([[1.0],[2.0],[3.0]])
y_data = torch.Tensor([[2.0],[4.0],[6.0]])

1.nn.Module: 是所有神经网络单元(neural network modules)的基类

nn:neural network

2.构造函数__init__():是用来初始化对象的时候默认调用的函数

3.class torch.nn.Linear(in_features,out_features,bias=True) y = Ax+b

in_features : size of each input sample
out_features : size of each output sample
python 复制代码
# 实例化模型
class LinearModel(torch.nn.Module):
    def __init__(self):
        super(LinearModel, self).__init__() # 调用父类的构造
        self.linear = torch.nn.Linear(1,1) # 实例化类,构造对象,包含了权重和偏置
        # Linear也是继承自module的,也能进行反向传播
        # nn:neural network
    def forward(self,x):
        y_pred = self.linear(x)
        return y_pred
    
model = LinearModel()

1.class torch.nn.MSELoss(size_average=True, reduce=True)

size_average:是否计算损失均值
reduce:

2.class torch.optim.SGD(model.parameters(),lr=<object object》,momentum=0,dampening=0,weight_decay=0,nesterov=False)

model.parameters(): 告诉优化器对哪些Tensor进行优化,检查所有成员
lr:learning rate 学习率

3.torch.nn.MSELoss也跟torch.nn.Module有关,参与计算图的构建,torch.optim.SGD与torch.nn.Module无关,不参与构建计算图。

python 复制代码
# 定义损失函数
criterion = torch.nn.MSELoss(size_average=False)
# 定义优化器
optimizer = torch.optim.SGD(model.parameters(), lr = 0.01)
python 复制代码
# 训练
for epoch in range(100):
    y_pred = model(x_data) # 计算y hat
    loss = criterion(y_pred,y_data) # 计算loss
    print(epoch,loss.item())
    
    # optimizer.zero_grad() # 梯度归零
    loss.backward() # 反向传播,计算梯度
    optimizer.step() # update 参数,即更新w和b的值
    optimizer.zero_grad() # 梯度归零

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.第三行直接使用对象调用函数(可调用对象)y_pred = model(x_data):

Module实现了魔法函数__call__(),call()里面有一条语句是要调用forward(),因此新写类中需要重写forward()覆盖父类的forward()
call() 函数的作用四可以直接在对象后面加(),例如实例化的model对象,和实例化的linear对象
调用此方法:super(LinearModel, self).init() 实例化了父类中所有方法

2.每一次epoch的训练过程,总结就是

①前向传播,求y hat (输入的预测值)
②根据y_hat和y_label(y_data)计算loss
③反向传播 backward (计算梯度)
④根据梯度,更新参数
⑤梯度清零

3.optimizer.zero_grad()

因为grad在 反向传播 的过程中是累加的,也就是说上一次反向传播的结果会对下一次的反向传播的结果造成影响,则意味着每一次运行反向传播,梯度都会累加之前的梯度,所以一般在反向传播之前需要把梯度清零。

本次代码实现的是批量处理数据

相关推荐
fīɡЙtīиɡ ℡32 分钟前
AI 应用系统设计
java·开发语言·人工智能
小淮AI39 分钟前
国际教育课程的本土化探索:以枫叶教育三十年为观察样本
大数据·人工智能
又折桃枝换酒钱1 小时前
VisCoder2:构建多语言可视化编码智能体(翻译与解读)
人工智能·信息可视化
AI绘画哇哒哒1 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent
Chengbei111 小时前
DSH渗透测试插件dsh-pentest全新升级!适配DeepSeek Harness,可视化探索链路,一键搭建轻量化AI渗透测试环境。
人工智能·web安全·网络安全·微信·小程序·系统安全·安全架构
QN1幻化引擎1 小时前
DalinX Phi 性能突破:跨层秩保持对齐与意识涌现度量的实证研究
人工智能·ai·架构·agi·asi
NeilCarmack1 小时前
Deepseek-harness增加桌面版端序列:第 1 讲 · 命令解析:`pnpm dsh desktop` 的第一步
人工智能·agent·ai agent
龙兵AI增长破局圈.赵老师讲成交1 小时前
只有把过程管好,结果才会出来。
大数据·人工智能·ai·创业创新
最强小杰2 小时前
gpt-5.6-sol 频繁报 503 怎么办?区分容量熔断和限速 429 的排查方法 + 可复用 retry wrapper
java·人工智能·gpt·ai
天天代码码天天2 小时前
我做了一个只有一个 EXE 的本地 Markdown 编辑器:lw.MD(简墨)
人工智能