首页 > 编程语言 >零基础学习人工智能—Python—Pytorch学习(三)

零基础学习人工智能—Python—Pytorch学习(三)

时间:2024-08-09 14:43:25浏览次数:11  
标签:loss tensor Python torch 张量 学习 Pytorch print grad

前言

这篇文章主要两个内容。
一,把上一篇关于requires_grad的内容补充一下。
二,介绍一下线性回归。

关闭张量计算

关闭张量计算。这个相对简单,阅读下面代码即可。

print("============关闭require_grad==============")
x = torch.randn(3, requires_grad=True)
print(x)
x.requires_grad_(False)  # 关闭x的张量计算

print("关闭x的张量计算后的x:", x)  # 没有requires_grad属性了

x = torch.randn(3, requires_grad=True)
print("新的带张量计算的x:", x)
y = x.detach()  # 去出x的张量附加属性,返回普通张量
print("y没有张量属性:", y)
print("x还有张量属性:", x)
print("============区域内去除x的张量附加属性==============")
with torch.no_grad():
    y = x+2
    print("y没有张量属性:", y)
print("x还有张量属性:", x)

一个有趣的例子

代码1如下,代码可以正常运行。

x = torch.tensor(1.0)
y = torch.tensor(2.0)
w = torch.tensor(1.0, requires_grad=True)
y_hat = w*x
loss = (y_hat-y)**2
print(loss)
loss.backward()
print(w.grad)

代码2如下,下面代码不能运行。

x = torch.tensor([1.0,2.0])
y = torch.tensor([1.0,2.0])
w = torch.tensor([1.0,2.0],requires_grad=True)
y_hat = w*x
loss =(y_hat-y)**2
print(loss)
loss.backward()
print(w.grad)

这是因为代码1的loss是个值,是个标量,所以它可以执行backward。
而代码2的loss是个向量,他不能执行backward。

线性回归 linear regression

很多视频或文章都说,深度学习要先理解线性回归。然后,大家一翻线性回归的视频,又是一堆。
其实,完全不用看那些课程,不用耽误那些时间。而且,你耽误了那些时间,也未必能理解。
线性回归是要学,但不用刷视频学,其实简单几句话就能讲明白的。只是没人好好讲而已,似乎都等着我们花费非常多的时间自己研究,自己开悟。

线性回归快速理解

首先理解线性是什么。
A=2,B=4,我们肉眼识别B是A的2倍,所以,我们就可以说A和B有关系,是什么关系呢?就是线性关系;线性就是这个意思,就说俩数有关系。
我们现在有了线性这个词了,今后遇到俩数有倍数关系,我们就直接说俩数有线性关系,这样就高大上了。
上篇文章提过,名词是我们学习阻碍,线性这个名词就是具体体现了。
回归就是我们找到B是A的2倍的过程。简单来说,线性回归就是找到一个数,这个数指明了A和B的关系。
找A和B关系,用函数表示,就是y=wx+b;A带入x,B带入y。肉眼推测结果w=2,b=0。
现在把A和B换成俩矩阵,然后w也就是一个矩阵,b还是一个常数。当我们求出w和b时,就是求出了A和B的线性关系。
到此,我们不用去看三四十个线性回归的视频,就已经对线性回归有概念了。

代码

我们直接看代码,x是特征值,y是目标值。
例如我们有一个青蛙A的图片,他的矩阵就是y,然后找一个青蛙B的图片,x就是青蛙B的矩阵。
然后通过线性回归算出,青蛙B与青蛙A的线性关系(w和b)。
这里输入特征x我们写死,不用读取青蛙B的矩阵;y也不用读取青蛙A,也写死。
然后定义w是一个跟x同型矩阵,然后定义b是一个0张量。
然后利用前面的知识使用backward求梯度,然后得到w.grad和b.grad。
w.grad和b.grad和w,b是同型张量,现在我们用w.grad和b.grad去修正w和b,修正时我们使用learning_rate学习率,确保一次只修改一点点。
然后反复迭代多次,就得到了我们的关系(w和b)。
代码如下:

# 输入特征和目标值
x = torch.tensor([1.0, 2.0])
y = torch.tensor([115.0, 21.0]) 

# 权重初始化(包括偏差项)
w = torch.tensor([1.0, 2.0], requires_grad=True)
b = torch.tensor(0.0, requires_grad=True)

# 学习率
learning_rate = 0.01

# 迭代多次进行优化
for epoch in range(100):
    # 预测
    y_hat = w * x + b
    
    # 损失函数
    loss = (y_hat - y).pow(2).mean()
    
    # 反向传播
    loss.backward()
    
    # 更新权重和偏差
    with torch.no_grad():
        w -= learning_rate * w.grad
        b -= learning_rate * b.grad
    
    # 清零梯度
    w.grad.zero_()
    b.grad.zero_()

    print(f'Epoch {epoch + 1}, Loss: {loss.item()}')

# 最终模型参数
print("Final weights:", w)
print("Final bias:", b)

运行如下图:
image

如图,我循环了100次,但loss的值还是比较大,loss的含义是,越接近0,这个w和b的值就越精确。
当然,如果青蛙A和B实在是不像,那可能循环了1000次,loss还是会很大。
这里我们循环100次后w=[51.8260,-9.4314] b=45.1103
现在我们使用y=wx+b带入x、w、b得到y_pred=51.8260 * 1 +45.1103= 96.9363。我们的y的第一项是115.0。
可以看到x通过wx+b得到的预测值,已经变的很接近y的真实值了。

现在修改运行2000次,运行如下图:
image

y=wx+b带入x、w、b得到y_pred=62.4444 * 1 +52.5554= 114.9998。
而我们的y的第一项是115.0。
可以看到,预测值已经非常接近真实值了。

传送门:
零基础学习人工智能—Python—Pytorch学习(一)
零基础学习人工智能—Python—Pytorch学习(二)

学习就先到这。


注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!



若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!

https://www.cnblogs.com/kiba/p/18350389

标签:loss,tensor,Python,torch,张量,学习,Pytorch,print,grad
From: https://www.cnblogs.com/kiba/p/18350389

相关文章

  • 以Zed项目为例学习大型Rust项目的组织与管理
    说明Zed项目代码:https://github.com/zed-industries/zed.git本文项目代码:https://github.com/VinciYan/zed_workspace.gitZed是一款由Atom创始人开发的高性能、协作友好的现代开源代码编辑器,使用Rust编写,集成AI辅助功能,旨在结合传统编辑器的速度和现代IDE的智能特性Zed项目......
  • 多模态学习之论文阅读:《Multi-modal Learning with Missing Modality in Predicting A
    《Multi-modalLearningwithMissingModalityinPredictingAxillaryLymphNodeMetastasis》(一)要点研究背景:多模态学习在医学图像分析中的重要性,尤其是乳腺癌早期患者的腋窝淋巴结转移(ALNM)诊断。问题陈述:临床信息的收集困难,导致多模态模型在实际应用中受限。研究目......
  • 多模态学习之论文阅读:《Multi-modal global- and local- feature interaction with at
    《Multi-modalglobal-andlocal-featureinteractionwithattention-basedmechanismfordiagnosisofAlzheimer’sdisease》-2024.9本文提出了一种新的多模态学习框架,用于提高阿尔茨海默病(Alzheimer'sdisease,AD)的诊断准确性。该框架旨在通过结合临床表格数据和大脑......
  • 多模态学习之论文阅读:《PREDICTING AXILLARY LYMPH NODE METASTASIS IN EARLY BREAST
    《PREDICTINGAXILLARYLYMPHNODEMETASTASISINEARLYBREASTCANCERUSINGDEEPLEARNINGONPRIMARYTUMORBIOPSYSLIDES》(一)要点提出一个基于注意力机制的多实例学习框架,构建了一个深度学习模型。该模型利用WSIs和临床数据预测早期乳腺癌(EBC)患者的腋窝淋巴结(ALN)转移状态......
  • python配置pip镜像
    Python配置pip的镜像国内的网络通过pip下载软件包只有不到10k的下载速度。不仅下载的慢,还容易引发超时错误,导致下载失败。而将给pip配置国内的镜像源可以完美的解决这个问题。本文讲解了pip在windows和macos/linux的配置过程(在windows实操成功)一、找到配置文件1.windows在......
  • Pytorch深度学习入门基础(三):python 加载数据初认识
    目录 一、 导入二、数据集中数据和label的组成形式三、Dataset读入数据四、Dataset类代码实战4.1创建函数4.2  设置初始化函数4.3读取每一个图片4.4设置获取数据长度函数4.5创建实例4.5.1单个图片数据集4.5.2 多个图片数据集    现在来开......
  • python多版本共存和虚拟环境
    多版本共存1.调用方式"py-3.10",即可使用对应版本的python虚拟环境1.vscode底部切到CMD,敲"py-3.8-mvenv.venv"(虚拟环境文件夹名,通常用".venv")2.点击vscode右下角,选择虚拟环境作为解释器注:以"."开头的文件在计算机系统中通常被称为隐藏文件。这些文件在许多操作系统中默认是不......
  • Python练习:数据类型篇
    一、逻辑推理练习  1、在不运行下面程序的前提下,说出答案。 1.4.0==42."4.0"==43.bool("1")4.bool("0")5.str(32)6.int(6.26)7.float(32)8.float("3.21")9.int("434")10.int("3.42")11.bool(-1)12......
  • MySQL——使用Python操作MySQL
    文章目录安装PyMySQL使用PyMySQL操作MySQL在Python中操作MySQL数据库时,我们使用较多的库是PyMySQL,如果你选择使用PyMySQL库,那么首先需要通过pip安装它。pipinstallpymysql命令就是用来安装PyMySQL的。安装PyMySQL1.打开你的命令行工具(如cmd、PowerShell、......
  • CSAPP学习随笔
    个人感想        这本书应该不需要我过多介绍了,看这本书个人依赖了视频和书本对照学习,学习的进度慢,某些章节理解起来也会比较痛苦(也有中文翻译不够准确的缘故),不知道多久可以更一期,做这个系列也算是鼓励自己加油学习。        关于书中的练习题,这个是帮助理解......