从零深度学习:(2)最小二乘法

今天我们从比较简单的线性回归开始讲起,还是一样我们先导入包

import numpy as np
import torch
import matplotlib as mpl
import matplotlib.pyplot as plt
a = torch.arange(1,5).reshape(2,2).float()
a

我们利用刚刚导入的画图的包将这两个点画出来,将1和3先索引出来作为横坐标,2和4作为纵坐标传入给plot,'o'表示画的是点而不是线

#画出上面两个点
plt.plot(a[:,0],a[:,1],'o')

                 

现在我们希望找到一条直线去穿过拟合这两个点,也就是所谓的线性回归,不妨设方程如下:

y = ax+b

我们在初中就学过两个点能够带入两个方程进行求解,将a和b通过解方程的形式求解出来。除了这种矩阵求解以外,我们还可以转化为一个优化问题来进行求解。其中优化问题最关键的两个就是优化指标和优化目标函数。我们现在的任务是找到一条直线拟合这两个点,所以显然目标就是将这两个点横坐标带进方程解析式的预测值y和实际的y(2,4)之间的误差变小。

我们可以在markdown中渲染得到如下表格,右侧是预测值和真实值的差值:

为了让差距变小,一个很朴素的想法就是求和变的最小,但是由于这里有正有负,可能会出现正负抵消的情况,所以这里我们采用先平方再求和,也就是所谓的误差平方和SSE:

至此我们已经完成了优化问题的转化,我们现在的目标就是找到a和b为何值的时候这个差值函数最小,因此上面这个函数也叫做目标函数。

我们导入画图工具包将这个函数图像画出来:

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
x = np.arange(-1, 3, 0.1)  # 增加步长,减少数据点数量
y = np.arange(-1, 3, 0.1)
a, b = np.meshgrid(x, y)
SSE = (2 - a - b)**2 + (4 - 3*a - b)**2

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(a, b, SSE, cmap='rainbow')
plt.show()

我们不难看出这是一个凸函数,而对于一个凸函数来说,最小值显然存在,所以根据这一点,我们可以给出求解凸函数最小值的一般方法,也就是最小二乘法。关于这个最小二乘法,我们在高数和概率论的学习中都有涉及,如果有不懂的宝子可以去补一下。当然凸函数优化方法还有很多,我们会在后续的学习中陆续提及。

所以这里就是对a和b分别求偏导并令其等于0,即可求解出来。

求解得出方程为:y = x +1,也就是说当(a,b)等于(1,1)的时候函数取得最小值。

在求解完之后我们也可以通过借助autograd模块来帮助我们验证导数是否为零。

autograd

我们可以在jupyter中输入如上代码,会发现如果你的张量requires_grad属性等于True,你每计算一步都会记录在grad_fn当中。例如这里的y是通过x乘法得到的,所以下面是Mul也就是乘法的缩写,同理z的Pow是power的缩写。

我们也可以通过.grad_fn来查看具体内容:

grad_fn 存储了当前张量的计算源和操作类型,用于梯度计算。具体来说,它指向一个与该张量相关的操作对象,操作对象是由上次计算生成的,这些对象的存在是为了在反向传播时提供梯度计算的方法,并且它们是由 PyTorch 自动生成并维护的。

同时,这是链式存储的一部分。在反向传播中,PyTorch 会按照计算图的反向顺序计算每个张量的梯度。这些 grad_fn 实际上是梯度计算的链条,记录了张量是如何从前一个操作得到的,并允许在反向传播时依赖于这些操作生成梯度。

所以根据这个回溯机制,我们可以画出输出张量是怎么一步一步得来的并画出张量计算图,如下:

PyTorch的计算图是动态计算图,会根据可微分张量的计算过程自动生成,并且伴随着新张量或运算的加入不断更新,这使得PyTorch的计算图更加灵活高效,并且更加易于构建,动态图也更加适用于面向对象编程。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

02JavaWeb——JavaScript-Vue(项目实战)

一、JavaScript html完成了架子,css做了美化,但是网页是死的,我们需要给他注入灵魂,所以接下来我们需要学习 JavaScript,这门语言会让我们的页面能够和用户进行交互。 1.1 介绍 通过JS/js效果演示提供资料进行效果演…

【Flink系列】5. DataStream API

5. DataStream API DataStream API是Flink的核心层API。一个Flink程序,其实就是对DataStream的各种转换。具体来说,代码基本上都由以下几部分构成: 5.1 执行环境(Execution Environment) Flink程序可以在各种上下文…

大模型高并发部署方案探究

版本 内容 姓名 时间 V1.0 新建 xx 2025-01-16 声明:只是进行探究,后续真正实践后,会更新新的内容 前置条件:70B的模型,并发要求200 性能测试参考链接 Benchmarking LLM Inference Backends :表明一台A100(8…

MIAOYUN信创云原生项目亮相西部“中试”生态对接活动

近日,以“构建‘中试’生态,赋能科技成果转化”为主题的“科创天府智汇蓉城”西部“中试”生态对接活动在成都高新区菁蓉汇隆重开幕。活动分为成果展览、“中试”生态主场以及成果路演洽谈对接三大板块。在成果展览环节,成都元来云志科技有限…

pytest-instafail:让测试失败信息即时反馈

pytest-instafail:让测试失败信息即时反馈 前言一、简介二、优势三、安装与使用3.1 未安装时运行情况3.2 安装3.3 已安装时运行情况3.3 pytest.ini 配置选项 四、对比 总结 前言 当测试用例数量庞大时,定位测试失败的原因往往耗时费力。此时,…

低代码平台:技术复杂性的系统简化

在传统开发模式下,应用构建需要经历需求分析、代码开发、测试部署等多环节,流程繁琐且耗时,往往成为企业技术创新的瓶颈。低代码平台通过模块化和自动化技术重新定义开发流程,使开发者能够在较短时间内实现复杂的应用功能&#xf…

精度论文:【Focaler-IoU: More Focused Intersection over Union Loss】

Focaler-IoU: 更聚焦的交并比损失 Focaler-IoU: More Focused Intersection over Union Loss Focaler-IoU: 更聚焦的交并比损失I. 引言II. 相关工作III. 方法IV. 实验V. 结论 原文地址:官方论文地址 代码地址:官方代码地址 摘要——边界框回归在目标检…

“AI智慧化服务系统:未来生活的智能管家

在当今快速发展的科技时代,人工智能(AI)正以前所未有的速度改变着我们的生活。AI智慧化服务系统作为这一变革的前沿技术,正在逐渐成为我们未来生活的智能管家。它们不仅提高了服务效率,还为我们带来了更加个性化和便捷…

nginx 修改内置 404 页面、点击劫持攻击。

1、在部署前端项目的目录下增加 404.html 页面:/opt/web/404.html。 2、在 nginx 配置中增加 404 配置: root /opt/web; # 设置根目录的配置error_page 404 404.html; location /404.html {root /opt/web;# 指定 404 页面所在的根目录internal;# 确保…

网络密集型应用的Linux网络缓冲区参数优化

一、网络IO密集型 1.哪些应用属于网络IO密集型应用 文件上传、下载服务器,实时大数据同步复制,Kafka巨量数据QPS生产消费环境,CDN等环境都是网络IO密集型的服务应用 2.知识来源 在《kafka权威指南2》书中环境搭建的网络小节写到了几个参数…

npm发布组件(vue3+webpack)

1.初始化Vue项目 vue create my-app 2.本地运行 npm run serve 3.新增目录和文件 1. src/package/index.js 2. src/package/wlz-btn/index.vue 3. src/package/wlz-input/index.vue // src\package\index.js import WlzBtn from "./wlz-btn"; import WlzInput …

Day05-后端Web基础——TomcatServletHTTP协议SpringBootWeb入门

目录 Web基础知识课程内容1. Tomcat1.1 简介1.2 基本使用1.2.1 下载1.2.2 安装与卸载1.2.3 启动与关闭1.2.4 常见问题 2. Servlet2.1 快速入门2.1.1 什么是Servlet2.1.2 入门程序2.1.3 注意事项 2.2 执行流程 3. HTTP协议3.1 HTTP-概述3.1.1 介绍3.1.2 特点 3.2 HTTP-请求协议3…

两级式三相光伏并网逆变器Matlab/Simulink仿真模型

忘记更新最经典的光伏并网仿真模型了,作为包含经典的MPPT和并网恒功率因素的双闭环控制模型,也是很多相关专业学生的入门研究内容,光伏并网模型三相的和单相都有。 其中三相光伏并网逆变器有大功率和小功率的两种,之前早在硕士期…

将图像输入批次扁平化为CNN

将图像输入批次扁平化为CNN 欢迎回到这个神经网络编程系列。在这篇文章中,我们将可视化一个单一灰度图像的张量扁平化操作,并且我们将展示如何扁平化特定的张量轴,这在使用CNN时通常是必需的,因为我们处理的是输入批次&#xff0…

Linux命令行工具-使用方法

参考资料 Linux网络命令:网络工具socat详解-CSDN博客 arm-linux-gnueabihf、aarch64-linux-gnu等ARM交叉编译GCC的区别_aarch64-elf-gcc aarch64-linux-gnu-CSDN博客 解决Linux内核问题实用技巧之-dev/mem的新玩法-腾讯云开发者社区-腾讯云 热爱学习地派大星-CS…

浅谈云计算20 | OpenStack管理模块(下)

OpenStack管理模块(下) 五、存储管理5.1 存储管理概述 5.2 架构设计5.2.1 Cinder块存储架构5.2.2 Swift对象存储架构 六、网络管理6.1 网络管理概述6.2 架构解析6.2.1 Neutron网络服务架构6.2.2 网络拓扑架构 6.3 原理与流程6.3.1 网络创建原理6.3.2 网络…

GPU 硬件原理架构(一)

这张费米管线架构图能看懂了,整个GPU的架构基本就熟了。市面上有很多GPU厂家,他们产品的架构各不相同,但是核心往往差不多,整明白一了个基本上就可以触类旁通了。下面这张图信息量很大,可以结合博客GPU 英伟达GPU架构回…

某国际大型超市电商销售数据分析和可视化

完整源码项目包获取→点击文章末尾名片! 本作品将从人、货、场三个维度,即客户维度、产品维度、区域维度(补充时间维度与其他维度)对某国际大型超市的销售情况进行数据分析和可视化报告展示,从而为该超市在弄清用户消费…

http转化为https生成自签名证书

背景 项目开发阶段前后交互采用http协议,演示环境采用htttps协议 ,此处为个人demo案例 组件 后端:springBoot 前端:vue web 服务:tomcat 部署环境:linux 生成自签名证书 创建目录 存储证书位置 # mkdir -p…

Sass初探:嵌套只是开始,解锁Sass更多功能

文章目录 1. 安装Sass2. Sass编译成CSS3. 设置编译后的CSS格式4. Sass和Scss有什么区别?5. Sass变量的使用6. 选择器嵌套写法7. Mixin(混合)8. extend(继承)9. Sass中的模块化(import)10. Sass中的模块化(use) 1. 安装Sass 要安装 Sass,你可以根据你的开…