李沐深度学习预备知识——线性代数
1、标量(不加粗表示)
用只有一个元素的张量表示
import torch
x = torch.tensor(3.0)
y = torch.tensor(2.0)
x + y, x * y, x / y, x**y
2、向量(小写粗体表示x)
机器学习大量文献定义向量默认方向为列方向。但每个数据样本,一般是矩阵中的一行表示
x=torch.arange(4) # 注意有个a
print(x) #tensor([0, 1, 2, 3])
print(x[3])#tensor(3)
len(x)# 4
x.shape# 可调用shape属性访问长度 torch.Size([4])
维度(dimension)在不同语境下含义不同,对于向量(轴)来说指代长度。对于其他张量表示该张量拥有的轴数。
3、矩阵(大写粗体表示X)
实例化张量时,可指定形状
A = torch.arange(20).reshape(5, 4)
转置
A.T
4、张量(特殊大写字母,加粗视情况而定)
有n个轴的代数对象称为n阶张量,向量是一阶张量,矩阵是二阶张量。
X = torch.arange(24).reshape(2, 3, 4)
5、张量算法的基本性质
对于张量运算,任何按元素二元运算的结果都将是相同形状的张量,包括+、-、*、/
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = A.clone() # 通过分配新内存,将A的一个副本分配给B,深拷贝,避免影响
A, A + B
上述代码若改为B=A,则若对B原址修改(例如B[:,:]=A+B)则,AB值同时变了,是浅拷贝。
矩阵的三种乘法方式:普通乘积(一般直接用AB表示,哈达玛积 ⊙ \odot ⊙和克罗内克积 ⨂ \bigotimes ⨂的介绍见下方链接内容,本文只介绍python实现。
矩阵三种乘积
A*B #hadamard product
2*A #乘以(加)标量等于矩阵A内每个元素乘以(加)这个标量
2+A
</