Pytorch线性回归实现(Pycharm实现)

步骤都在注释里写清楚了,可以自己调整循环的次数观察输出的w与b和loss的值

python 复制代码
import torch

#学习率,用来进行w和b的更新
learning_rate = 0.01
#1. 准备数据
#这里使用y=3x+0.8.也就是w=3,b=0.8.创造一个500行1列的数据
x=torch.rand([500,1])
y_true=x*0.3+0.8

#2. 通过模型计算y_predict。x*w,所以w是1行1列的.torch.matmul是矩阵乘法.只有浮点数才能使用grad。修改dtype
w = torch.rand([1,1],requires_grad=True)
b = torch.tensor(0,requires_grad=True,dtype=torch.float32)


#4. 通过循环,反向传播,更新参数
for i in range(5000):
    y_predict = torch.matmul(x, w) + b
    # 3. 计算loss.用平方来处理,这里mean不太清楚是什么意思。均方误差?这是什么?....每次都需要更新损失,所以把他放在循环里
    loss = (y_true - y_predict).pow(2).mean()

    #每次backward之前梯度置为0
    if w.grad is not None:
        w.grad.data.zero_()
    if b.grad is not None:
        b.grad.data.zero_()

    loss.backward() #反向传播.这时w和b的梯度就算出来了w.grad,b.grad
    w.data = w.data - learning_rate * w.grad
    b.data = b.data - learning_rate * b.grad  #要注意左边不要写成grad,写成grad之后b的内容就一直是0
    print("w,b,loss",w.item(),b.item(),loss.item())

输出:

可以观察到w接近0.3,b接近0.8。和预想值十分接近了。

问题:

这里的理解有欠缺。。。

相关推荐
AI科技星9 小时前
线性回归不是拟合直线工具,是两套耦合双螺旋提取同步主干,生成二者共生平衡基准轨迹《全域数学vs传统数学:人类文明进阶200讲》第67讲 高中通俗版逐字稿
算法·回归·线性回归·乖乖数学·全域数学
万亿少女的梦16812 小时前
基于深度学习的动物图像分类系统设计与实现
pytorch·深度学习·计算机视觉·图像分类·convnext
Always_away1 天前
动手学深度学习|线性神经网络:线性回归的实现
深度学习·神经网络·线性回归
西西弗Sisyphus1 天前
PyTorch 数据加载:Dataset、DataLoader 与 WeightedRandomSampler 解决类别不平衡
pytorch·python
小白学大数据2 天前
无库无捷径,PyTorch 手写完整 Transformer 大语言模型 LLM
开发语言·pytorch·语言模型·transformer
不瘦80斤不改名2 天前
HalfCart:基于LBS的1\.5km本地拼单系统全栈实践与踩坑复盘
python·docker·typescript·pycharm
承渊政道2 天前
【从零开始大模型开发与微调:基于PyTorch与ChatGLM】(基于PyTorch卷积层的MNIST分类实战:从卷积直觉到高效卷积设计)
人工智能·pytorch·神经网络·分类·chatglm·卷积·大模型学习
想会飞的蒲公英2 天前
一个 PyTorch 模型训练的完整流程
人工智能·pytorch·python
梦想三三2 天前
Flask + PyTorch模型部署实战:从训练权重到API接口完整工程解析(附完整代码)
人工智能·pytorch·python·flask·模型推理·ai 工程化
白日做梦Q3 天前
PyTorch从零手写CNN实现NEU钢材表面缺陷检测(完整实战·单篇完结)
人工智能·pytorch·cnn