深度学习与神经网络pytorch版 2.3 线性代数

深度学习与神经网络pytorch版 2.3 线性代数

目录

深度学习与神经网络pytorch版 2.3 线性代数

1. 简介

2. 线性代数

2.3.1 标量

​编辑2.3.2 向量

2.3.3 矩阵

2.3.4 张量及其性质

2.3.5 降维

2.3.6 非降维求和

2.3.7 点积

2.3.8 矩阵-向量积

2.3.9 矩阵-矩阵乘法

2.3.10 范数

3. 小结

1. 简介

  深度学习与线性代数之间有着密切的联系。线性代数是深度学习算法中用于表达和处理数据的数学工具之一,尤其是在构建神经网络和处理多维数据时。

线性代数中的基本概念包括向量、矩阵和线性变换等,这些概念在深度学习中有着广泛的应用。例如,在神经网络的训练过程中,权重和偏差可以看作是矩阵和向量,它们通过线性变换来改变输入数据的特征,从而实现分类或回归等任务。

此外,线性代数中的范数也是深度学习中常用的概念。范数可以用来衡量向量的大小,对于限制模型复杂度和提升模型的泛化能力具有重要作用。在深度学习中,范数通常用于正则化、优化算法等。

最后,特征值分解是线性代数中的另一个重要概念,它在深度学习中用于将矩阵分解成一组特征向量和特征值。特征值分解可以帮助我们了解数据的内在结构和关系,例如在降维、数据可视化等方面有着广泛的应用。

综上所述,线性代数在深度学习中扮演着重要的角色,它为深度学习提供了数学基础和工具,使得我们能够更好地理解和处理复杂的数据结构和模式。

2. 线性代数

2.3.1 标量

# 2.3.1 标量
# 导入PyTorch库。PyTorch是一个开源的深度学习库,提供了张量计算等功能。  
import torch
# 打印字符串'2.3.1 标量'到控制台。  
print('2.3.1 标量')
# 使用torch.tensor()函数创建一个标量张量x1,其值为4.0。  
x1 = torch.tensor(4.0)
# 使用torch.tensor()函数创建另一个标量张量y1,其值为3.0。  
y1 = torch.tensor(3.0)
# 打印x1和y1的和。由于x1和y1都是标量,所以直接相加即可。  
print(x1 + y1)
# 打印x1和y1的乘积。  
print(x1 * y1)
# 打印x1除以y1的结果。 
print(x1 / y1)
# 打印x1的y1次幂。 
print(x1 ** y1)

2.3.2 向量


# 2.3.2 向量
import torch
print('2.3.2 向量')
x2 = torch.arange(6)
print(x2)
print(x2[4]) # 可以通过x[i]来引用第个i个元素(从0开始)
print(len(x2)) # 通过len()函数来访问长度
print(x2.shape) # 通过.shape属性访问向量的长度

2.3.3 矩阵

# 2.3.3 矩阵
import torch
print('2.3.3 矩阵')
A = torch.arange(20).reshape(5,4)
print(A)
W = A.T # 交换矩阵的行和列时,结果称为矩阵的转置(transpose)
print(W)
B = torch.tensor([[1,2,3],[2,0,4],[3,4,5]])
print(B)
E = B == B.T # 对称矩阵(symmetric matrix)
print(E)

2.3.4 张量及其性质

# 2.3.4 张量及其性质
import torch
print('2.3.4 张量')
X3 = torch.arange(24).reshape(2,3,4)
print(X3)
A = torch.arange(20,dtype=torch.float32).reshape(5,4)
B = A.clone() # 重新分配内存,将A复制给B
print(A)
print(A + B)
print(A * B)
# 将张量乘以或加上一个标量不会改变张量的形状,其中张量的每个元素都将与标量相加或相乘
a = 3
X4 = torch.arange(24).reshape(2,3,4)
print(a + X4)
print((a * X4).shape)

2.3.5 降维

# 2.3.5 降维import torch 
print('2.3.5 降维')
# 创建一个从0到3的浮点数张量,总共有4个元素。  
x = torch.arange(4, dtype=torch.float32)
print(x)  # 输出: tensor([0., 1., 2., 3.])  
print(x.sum())  # 输出: 6.0,求和结果为1+2+3=6  # 创建一个20元素的浮点数张量,并将其重新塑形为一个5x4的二维张量。  
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)print(A.shape)  # 输出: tensor([5, 4]),表示张量A有5行和4列。  
print(A.sum())  # 输出: 120.0,求和结果为0+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19=120  
# 对A的每一列求和,结果为一个包含5个元素的张量。  
A_sum_axis0 = A.sum(axis=0)
print(A_sum_axis0)  # 输出: tensor([30., 35., 40., 45., 50.])  
print(A_sum_axis0.shape)  # 输出: tensor([5]),表示每个元素都是一个独立的张量。  # 对A的每一行求和,结果为一个包含4个元素的张量。  
A_sum_axis1 = A.sum(axis=1)
print(A_sum_axis1)  # 输出: tensor([ 6.,  6.,  6.,  6.,  6.])  
print(A_sum_axis1.shape)  # 输出: tensor([5]),表示每个元素都是一个独立的张量。  # 同时对A的行和列求和。结果为一个单一的数值。  
print(A.sum(axis=[0, 1]))  # 输出: 600.0,求和结果为(0+4+8+12+16)+(1+5+9+13+17)+(2+6+10+14+18)+(3+7+11+15+19)=600  
print(A.mean())  # 输出: tensor(6.),计算所有元素的平均值。  
print(A.sum() / A.numel())  # 输出: tensor(6.),计算所有元素的平均值。通过总和除以元素总数得到。  
print(A.mean(axis=0),A.sum(axis=0) / A.shape[0])  # 输出: tensor([6., 7., 8., 9.]) 和 tensor([7., 7., 7., 7.])。分别计算每列和每行的平均值。

2.3.6 非降维求和

# 2.3.6 非降维求和
print('2.3.6 非降维求和')
import torch
A = torch.arange(20,dtype=torch.float32).reshape(5,4)
sum_A = A.sum(axis=1, keepdims=True)
print(sum_A)
print(A / sum_A) #由于sum_A在对每行进行求和后仍保持两个轴,我们可以通过广播将A除以sum_A。
print(A.cumsum(axis=0))

2.3.7 点积

# 2.3.7 点积
import torch
print('2.3.7 点积')
x = torch.arange(4, dtype=torch.float32)y = torch.ones(4, dtype = torch.float32)
print(x)
print(y)
print(torch.dot(x, y))

2.3.8 矩阵-向量积

# 2.3.8. 矩阵-向量积import torch
print('2.3.8. 矩阵-向量积')
A = torch.arange(20,dtype=torch.float32).reshape(5,4)
x = torch.arange(4, dtype=torch.float32)print(A.shape)
print(x.shape)
print(torch.mv(A, x))

2.3.9 矩阵-矩阵乘法

# 2.3.9. 矩阵-矩阵乘法
import torch
print('2.3.9. 矩阵-矩阵乘法')
A = torch.arange(20,dtype=torch.float32).reshape(5,4)
B = torch.ones(4, 3)
print(torch.mm(A, B))

2.3.10 范数

# 2.3.10. 范数
import torch
print('2.3.10. 范数')
# 创建一个包含两个浮点数的张量u。  
u = torch.tensor([3.0, -4.0])
print(torch.norm(u))  # 输出: 5.0,计算u的范数(默认使用欧几里得范数)。  # 计算张量u中每个元素的绝对值之和。  
print(torch.abs(u).sum())  # 输出: 7.0,绝对值之和为3+4=7。  # 创建一个形状为(4,9)的全1张量,并计算其范数。  
print(torch.norm(torch.ones((4, 9))))  # 输出: 9.0,计算全1张量的范数(默认使用欧几里得范数)。

3. 小结

  1. 标量、向量、矩阵和张量是线性代数中的基本数学对象。

  2. 向量泛化自标量,矩阵泛化自向量。

  3. 标量、向量、矩阵和张量分别具有零、一、二和任意数量的轴。

  4. 一个张量可以通过summean沿指定的轴降低维度。

  5. 两个矩阵的按元素乘法被称为他们的Hadamard积。它与矩阵乘法不同。

  6. 在深度学习中,我们经常使用范数,如\(L_1\)范数、\(L_2\)范数和Frobenius范数。

  7. 我们可以对标量、向量、矩阵和张量执行各种操作。

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

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

相关文章

linux平台 LED情报板网关项目总结

LED情报板目前已经基本稳定 主要存在两个版本LED1.5 和LED2 两个版本的主要差别是 : 1.1.5的配置文件存在本地 2.0的存在平台 需要通过接口从平台获取 2.1.5的下发消息的时候需要同步返回 2.0的是异步返回,所以1.5的要尽可能完成 不然会导致发 布平台…

【python】求解线性方程

唯一解(矩阵法、solve函数) { 3 x y 9 x 2 y 8 \left\{ \begin{matrix} 3xy9 \\ x2y8 \end{matrix} \right. {3xy9x2y8​ A x b Axb Axb,其中 A [ 3 1 1 2 ] A\left[\begin{matrix} 3 & 1 \\ 1 &2 \end{matrix}\right] A[31​12​], B [ 9 8 ] B\left[\begin{m…

境外投资企业备案结果公开名录列表数据

境外投资企业备案结果公开名录列表数据 1、时间:更新至2023年10月16日 2、指标:境外投资企业_机构、境内投资者名称、投资国别地区 3、来源:商务部 4、指标解释 境外投资企业(机构)备案结果公开名录列表&#xff…

Java使用io流生成pdf文件

首先生成pdf和正常请求接口一样,直接写~ Controller层: 第一个注解:最顶层增加 Controller 注解(控制器)不多讲了 直接加上。 第二个注解:最顶层增加 CrossOrigin 注解此注解是为了浏览器请求的时候防…

SpringBoot 结合 liteflow 规则引擎使用

1、前言 在日常的开发过程中,经常会遇到一些串行或者并行的业务流程问题,而业务之间不必存在相关性。 在这样的场景下,使用策略和模板模式的结合可以很好的解决这个问题,但是使用编码的方式会使得文件太多,在业务的部分环节可以…

课程页页面

课程组件 <template><div class"course"><Header></Header><div class"main"><!-- 筛选条件 --><div class"condition"><ul class"cate-list"><li class"title">课…

LabVIEW扫频阻抗测试系统

实现扫频阻抗法用于检测变压器绕组变形&#xff0c;结合了短路阻抗法和频响法的优点&#xff0c;但受限于硬件精度&#xff0c;尤其是50 Hz短路阻抗测试存在稳定性和准确性的问题。通过LabVIEW编程&#xff0c;控制宽频带信号发生器和高速采集卡&#xff0c;提高测试结果的稳定…

【论文阅读|细胞实例分割算法ASF-YOLO】

论文题目&#xff1a;ASF-YOLO: A novel YOLO model with attentional scale sequence fusion for cell instance segmentation 论文链接&#xff1a; https://arxiv.org/abs/2312.06458 代码链接&#xff1a;https://github.com/mkang315/ASF-YOLO 摘要&#xff08;Abstract&a…

C++(6) 继承

文章目录 继承1. 继承1.1 什么是继承1.2 C 继承方式1.2.1 基本案例1.2.2 继承权限组合1.2.3 继承中构造函数的说法1.2.4 继承中析构函数的执行顺序1.2.5 继承中变量名称冲突问题1.2.6 继承中函数【重写】 继承 1. 继承 1.1 什么是继承 面向对象程序设计中最重要的一个概念是继…

vscode在使用ssh链接工具看不到隐藏的文件,如何解决?

Visual Studio Code (VSCode) 的 SSH 远程开发插件默认情况下不会显示隐藏文件和文件夹。解决这个问题的方式是更改 VSCode 的设置&#xff0c;让其显示隐藏文件和文件夹。 以下是如何操作的步骤&#xff1a; 打开 VSCode。 点击左下角的设置按钮&#xff08;齿轮图标&#x…

学fpga和还是嵌入式?

具体要选哪个&#xff0c;更多还是看个人喜好还有基础知识结构。 我们先来明白下两者区别在哪&#xff1f; 1、嵌入式&#xff1a;分两部分&#xff0c;第一是嵌入式软件开发&#xff0c;主要与嵌入式操作系统、应用软件等有关。第二是嵌入式硬件开发&#xff0c;需要掌握硬件…

使用xlsx、xlsx-style导出表格添加背景色;合并单元格部分样式缺失问题解决

这篇说一下使用xlsx-style导出excel时样式的设置。需要安装xlsx、xlsx-style、file-saver插件&#xff08;file-saver可以不装&#xff0c;用a标签代替也可以&#xff09;&#xff0c;安装时可能会碰到一些报错问题&#xff0c;可以去看下我之前一篇博客&#xff1a;纯前端导出…

AI投资或成科技裁员罪魁祸首

最近的科技裁员让许多人对这个行业的稳定性产生了疑问。然而&#xff0c;仔细观察发现&#xff0c;这些裁员并不是经济困境的迹象&#xff0c;而是科技公司为了重新调整优先事项并投资未来而进行的战略举措。科技行业正投入数十亿美元用于人工智能&#xff08;AI&#xff09;&a…

Redis数据类型-五大基本数据类型

文章目录 Redis五大数据类型String(字符串)List(列表)Set(集合)Hash(哈希)Zset(有序集合) 总结 Redis五大数据类型 String(字符串) String基本命令&#xff1a; 127.0.0.1:6379> set key1 hello #设置值 OK 127.0.0.1:6379> get key1 # 获取值 "hello" …

深入玩转Playwright:高级操作解析与实践

playwright高级操作 iframe切换 ​ 很多时候&#xff0c;网页可能是网页嵌套网页&#xff0c;就是存在不止一个html标签&#xff0c;这时候我们的selenium或者playwright一般来说定位不到&#xff0c;为什么呢&#xff1f; ​ 因为默认是定位到第一个标准的html标签内部。 …

STM32——USART

一、通信 1.1通信是什么&#xff1b; 通信是将一个设备的数据发送到另一个设备中&#xff0c;从而实现硬件的扩展&#xff1b; 1.2通信的目的是什么&#xff1b; 实现硬件的扩展-在STM32中集成了很多功能&#xff0c;例如PWM输出&#xff0c;AD采集&#xff0c;定时器等&am…

小程序样例5:简单登录界面

基本功能 1、头像选择、用户名、密码、昵称选择、性别、城市 2、确认注册跳转 我的页面。 3、其他注册方式跳转用户名 密码登录方式 4、清除 和 密码显示按钮&#xff1a; 5、用户名、密码合法性校验&#xff1a; 6、点击微信图标&#xff0c;调转回微信登录&#xff1a; 代码…

star原则

"STAR" 原则通常用于回答面试或描述工作经验等场景中&#xff0c;以清晰、有条理地传达信息。"STAR" 是 Situation&#xff08;情境&#xff09;、Task&#xff08;任务&#xff09;、Action&#xff08;行动&#xff09;、Result&#xff08;结果&#xf…

P2241 统计方形(数据加强版)题解

题目 有一个nm方格的棋盘&#xff0c;求其方格包含多少正方形、长方形&#xff08;不包含正方形&#xff09;。 输入输出格式 输入格式 一行&#xff0c;两个正整数n,m&#xff08;n≤5000,m≤5000&#xff09;。 输出格式 一行&#xff0c;两个正整数&#xff0c;分别表…

部署YUM仓库服务

一、yum仓库 1. yum简介 yum是一个基于RPM包&#xff08;是Red-Hat Package Manager红帽软件包管理器的缩写&#xff09;构建的软件更新机制&#xff0c;能够自动解决软件包之间的依赖关系。 为什么会有依赖关系的发生 因为linux本身就是以系统简洁为自身优势&#xff0c;所以…