深度学习预备知识(线性代数)

介绍:

深度学习是一种机器学习的方法,涉及到大量的线性代数运算。线性代数是研究向量空间和线性映射的数学学科。在深度学习中,线性代数常用于表示和处理输入数据和模型参数。下面是一些深度学习中常见的线性代数概念和运算:

  1. 向量:在深度学习中,向量是一种表示数据的结构。它可以表示输入数据、模型参数和梯度等。向量通常用列向量表示,形如x = [x1, x2, ..., xn]。向量之间可以进行加法、减法和标量乘法等运算。

  2. 矩阵:矩阵是一个二维的数组,通常用于表示线性映射。在深度学习中,矩阵用于表示输入数据和模型的权重。矩阵乘法是深度学习中最常用的运算之一,用于实现神经网络的前向传播和反向传播。

  3. 转置:矩阵的转置是将矩阵的行和列互换得到的新矩阵。在深度学习中,转置常常用于计算梯度和调整矩阵的形状。

  4. 矩阵的逆:一个可逆矩阵的逆矩阵是使得矩阵与其逆矩阵相乘等于单位矩阵的矩阵。在深度学习中,矩阵的逆常用于求解线性方程组和计算梯度。

  5. 行列式:行列式是一个与矩阵相关的标量值。在深度学习中,行列式被用于判断矩阵是否可逆,从而决定是否能够求解线性方程组。

  6. 特征值和特征向量:特征值和特征向量是矩阵运算中的重要概念。特征值表示线性映射中的缩放比例,特征向量表示变换后的方向。在深度学习中,特征值和特征向量常用于降维和分析模型的性质。

以上是深度学习中常见的线性代数概念和运算。深入理解线性代数对于掌握深度学习的原理和实践非常重要。

1、标量与变量

python 复制代码
import torch

print('1.标量与变量')
x = torch.tensor([3.0])
y = torch.tensor([2.0])
print(x + y, x * y, x / y, x ** y)

2、向量

python 复制代码
x = torch.arange(4)
print('2.向量')
print('x:', x)
print('x[3]:', x[3])  # 通过张量的索引来访问任一元素
print('张量的形状:', x.shape)  # 张量的形状
print('张量的长度:', len(x))  # 张量的长度
z = torch.arange(24).reshape(2, 3, 4)
print('三维张量的长度:', len(z))

3、矩阵

python 复制代码
print('3.矩阵')
A = torch.arange(20).reshape(5, 4)
print('A:', A)
print('A.shape:', A.shape)
print('A.shape[-1]:', A.shape[-1])
print('A.T:', A.T)  # 矩阵的转置

B=torch.tensor([[1,2,3],[2,0,4],[3,4,5]])#对称矩阵
B==B.T

4、矩阵计算

python 复制代码
print('4.矩阵的计算')
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = A#内存一样,不会改变
B = A.clone()  # 通过分配新内存,将A的一个副本分配给B
print('A:', A)
print('B:', B)
print('A + B:', A + B)  # 矩阵相加
print('A * B:', A * B)  # 矩阵相乘
python 复制代码
a = 2
X = torch.arange(24).reshape(2, 3, 4)
print('X:', X)
print('a + X:', a + X)  # 矩阵的值加上标量
print('a * X:', a * X)
print((a * X).shape)

5、矩阵的sum运算

python 复制代码
print('5.矩阵的sum运算')
print('A:', A)
print('A.shape:', A.shape)
print('A.sum():', A.sum())
print('A.sum(axis=0):', A.sum(axis=0))  # 沿0轴汇总以生成输出向量
print('A.sum(axis=1):', A.sum(axis=1))  # 沿1轴汇总以生成输出向量
print('A.sum(axis=1, keepdims=True)', A.sum(axis=1, keepdims=True))  # 计算总和保持轴数不变
print('A.sum(axis=[0, 1]):', A.sum(axis=[0, 1]))  # Same as `A.sum()`
print('A.mean():', A.mean())
print('A.sum() / A.numel():', A.sum() / A.numel())


a=torch.ones((2,5,4))
a.shape
#结果:torch.Size([2, 5, 4])

a.sum(axis=1).shape#把中间那一维给丢掉了
#结果:torch.Size([2, 4])

a.sum(axis=1,keepdims=True).shape#保留了中间那一维
#结果:torch.Size([2, 1, 4])
python 复制代码
sum_A=A.sum(axis=1,keepdims=True)#计算总和或均值时保持轴数不变
print('sum_A:',sum_A)
print('通过广播将A除以sum_A:\n',A/sum_A)

6、向量相乘(点积)

python 复制代码
print('6.向量-向量相乘(点积)')
x = torch.arange(4, dtype=torch.float32)
y = torch.ones(4, dtype=torch.float32)
print('x:', x)
print('y:', y)
print('向量-向量点积:', torch.dot(x, y))#对应的相乘再相加

7、矩阵向量乘积(向量积)

python 复制代码
print('7.矩阵-向量相乘(向量积)')
print('A:', A)  # 5*4维
print('x:', x)  # 4*1维
print('torch.mv(A, x):', torch.mv(A, x))

8、矩阵相乘(向量积)

python 复制代码
print('8.矩阵-矩阵相乘(向量积)')
print('A:', A)  # 5*4维
B = torch.ones(4, 3)  # 4*3维
print('B:', B)
print('torch.mm(A, B):', torch.mm(A, B))

9、范数

python 复制代码
print('9.范数')#向量或者矩阵的长度
u = torch.tensor([3.0, -4.0])
print('向量的𝐿2范数:', torch.norm(u))  # 向量的𝐿2范数
print('向量的𝐿1范数:', torch.abs(u).sum())  # 向量的𝐿1范数
v = torch.ones((4, 9))
print('v:', v)
print('矩阵的𝐿2范数:', torch.norm(v))  # 矩阵的𝐿2范数

10、根据索引访问矩阵

python 复制代码
print('10.根据索引访问矩阵')
y = torch.arange(10).reshape(5, 2)
print('y:', y)
index = torch.tensor([1, 4])
print('y[index]:', y[index])
相关推荐
阡之尘埃1 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
孙同学要努力3 小时前
全连接神经网络案例——手写数字识别
人工智能·深度学习·神经网络
Eric.Lee20213 小时前
yolo v5 开源项目
人工智能·yolo·目标检测·计算机视觉
其实吧34 小时前
基于Matlab的图像融合研究设计
人工智能·计算机视觉·matlab
丕羽4 小时前
【Pytorch】基本语法
人工智能·pytorch·python
ctrey_4 小时前
2024-11-1 学习人工智能的Day20 openCV(2)
人工智能·opencv·学习
bryant_meng4 小时前
【python】Distribution
开发语言·python·分布函数·常用分布
SongYuLong的博客4 小时前
Air780E基于LuatOS编程开发
人工智能
Jina AI4 小时前
RAG 系统的分块难题:小型语言模型如何找到最佳断点?
人工智能·语言模型·自然语言处理
-派神-4 小时前
大语言模型(LLM)量化基础知识(一)
人工智能·语言模型·自然语言处理