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

news/2024/11/17 3:28:26/文章来源:https://www.cnblogs.com/kiba/p/18350389

前言

这篇文章主要两个内容。
一,把上一篇关于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+2print("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.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.gradb -= 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/780290.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java - IO流

(IO随用随创建,不用了就关流) 1.字节流 OutputStream(字节输出流,写出) FileOutputStreanmoff表示起始索引,len表示截取长度 Windows换行符:"\r\n" Linux:"\n" Mac:"\r" 续写:创建对象第二个参数写true字节打印流(特有方法会原样输出…

Win10无法登录到你的帐户的问题

症状登录之后,系统有个弹窗,提示无法登录到你的帐户2,桌面上原本放的东西不见了,桌面上新放的东西,重启电脑之后会丢失,不能保存 3,cmd 命令行 > echo %userprofile% 之后显示的是TEMP.000, TEMP.001这样子的临时目录问题分析尝试用过参考资料中修改注册表的方法,不…

python配置pip镜像

Python配置pip的镜像国内的网络通过pip下载软件包只有不到10k的下载速度。不仅下载的慢,还容易引发超时错误,导致下载失败。而将给pip配置国内的镜像源可以完美的解决这个问题。本文讲解了pip在windows和macos/linux的配置过程(在windows实操成功)一、 找到配置文件 1.wind…

滴滴出行:多元化出行服务创新与市场领先地位

一、产品概述 产品名称:滴滴出行 产品定位:滴滴出行是一款集多种出行方式于一体的综合出行服务平台,致力于为用户提供安全、便捷、高效的出行体验。二、功能描述 1.多样化出行服务:滴滴出行提供包括快车、专车、出租车、顺风车、代驾、公交、地铁、单车等多种出行方式,满足…

派胜OA ExpressOA 3.0 现已支持 Ubuntu 24.04 LTS

ExpressOA 3.0 跨平台,高性能,现代化的协同办公平台系统。ExpressOA 3.0 现已支持 Ubuntu 24.04 LTS - 世界上最流行的 Linux 操作系统。访问派胜OA官网:www.paioffice.com 随着 .NET 8 的推出,Ubuntu 在支持 .NET 社区方面迈出了重大的一步。 .NET 8 将在 Ubuntu 24.04 LT…

派胜OA ExpressOA 3.0 现已支持 openEuler 24.03 LTS

ExpressOA 3.0 跨平台,高性能,现代化的协同办公平台系统。ExpressOA 3.0 现已支持 openEuler 24.03 LTS - 面向数字基础设施的开源操作系统。访问派胜OA官网:https://www.paioffice.com/

OFtutorial01_inputOutput解析

OFtutorial1.C 源码解析 #include "fvCFD.H"int main(int argc, char *argv[]) {// Initialise OF case#include "setRootCase.H"// These two create the time system (instance called runTime) and fvMesh (instance called mesh).#include "creat…

Motrix下载器使用教程

使用浏览器下载通常会有速度慢的问题,需要借助一些下载管理器软件来进行提速,但有的下载器存在广告多、或者需要付费成为会员才能享受高速下载。这里介绍的Motrix是一款无广告、免费、开源的下载软件,目前使用体验不错,使用方法也很简单。 下载安装前往官网进行下载:https…

宏基因组实战之:质控去宿主

1、测序数据 数据来源于密歇根大学的一项研究,数据项目号为PRJNA389927。这个研究项目的包括正常、癌前病变和癌症病人样本共181例。项目对应的github地址:https://github.com/SchlossLab/Hannigan_CRCVirome_mBio_2018 ,也可以直接去ebi网站下载这个项目的原始测序数据,会…

宏基因组实战之:公开数据下载

1、测序数据 数据来源于密歇根大学的一项研究,数据项目号为PRJNA389927。这个研究项目的包括正常、癌前病变和癌症病人样本共181例。项目对应的github地址:https://github.com/SchlossLab/Hannigan_CRCVirome_mBio_2018 ,也可以直接去ebi网站下载这个项目的原始测序数据,会…

在Power BI表或矩阵中创建迷你图

第一部分:什么是迷你图? Power BI目前已支持在表或矩阵添加迷你图(迷你图功能目前为预览版)。迷你图可以方便用户快速查看和比较趋势,同时可以突出显示最大值和最小值等等,非常实用。 样例图: 前期准备:开启迷你图功能 默认情况下,迷你图应是开启的状态。由于大家使用…

程序员壁纸合集分享,最后一张有惊喜

周五轻松一下,给大家分享一些程序员有关的壁纸,看到最后一张有惊喜哦~大家好,我是程序员鱼皮,今天轻松一下,给大家分享一些程序员有关的壁纸,看到最后一张有惊喜哦~经典壁纸 神图镇楼:希望这张壁纸不要成真:这是程序员每天的生活么?有多少人能看懂这张图的意思?01 是…