python中的“nadrray类”和“tensor类”都是线性代数中数组的体现。学习时可以从这几个方面下手:常用库函数、类对象方法、类对象属性、类对象之间运算、类对象元素的获取(切片)
1.1:torch库函数
pytorch库 | numpy库 |
torch.tensor() |
np.array() |
torch.ones() | np.ones() |
torch.zeros() | np.zeros() |
torch.arange() | np.arange() |
torch.randn() | np.random.rand() |
torch.exp() | np.exp() |
注:都是一些常用的函数,可指定dtype,例如dtype=torch.float32,深度学习中常用float32类型数据
1.2 torch类对象方法
假设x是一个tensor对象,常用方法有: x.reshape() x.numel() (计算X中元素的个数) len(x)输出第一个轴的维度 x.mean() x.sum() x.T
1.3 torch类对象属性
x.shape x.dim
1.4:tensor间的运算
加(+)、减(-)、乘(X)、除(÷)、是否相等(=;!=)、点积torch.dot(), torch.mv(), torch.mm()
1.5 类对象元素的获取(切片)
切片(用方括号)x[ ]
1.6:转为numpy对象
x.numpy()
总结:深度学习存储和操作数据的主要接口是张量。它提供了各种功能,包括基本数学运算、广播、索引、切片、内存节省和转换其他Python对象。
1:关于ndarray对象切片
import numpy as np
num = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(num)
print(num[[0, 1], [0, 1]])
结果:
[[1 2 3]
[4 5 6]
[7 8 9]]
[1 5]
numpy中的切片方式有些奇怪,num[[0, 1], [0, 1]]表示第一行第一列以及第二行第二列两个元素所组成的数组。
2、关于numpy和pytorch中,sum()方法的使用
求和:x.sum(axis=0),含义:沿0轴汇总以生成输出向量。非汇总求和方法:可指定参数 keepdims=True
若沿k轴汇总,则丢失k轴的维数
A.cumsum()函数,汇总函数,此函数不会沿任何轴汇总输入张量。
num.sum(axis=0)
结果:
array([12, 15, 18])
3、矩阵乘法
[两个矩阵的按元素乘法称为 哈达玛积(Hadamard product)(数学符号 ⊙)]torch.dot()
要点:python和matlab不同,python中 * 的意思是矩阵按元素进行乘法,而matlab中则表示矩阵乘法
torch.mv() 矩阵与向量相乘 torch.mm() 矩阵与矩阵相乘
4、深度学习中常用范数
其中,在 L2 范数中常常省略下标 2,也就是说,∥x∥ 等同于 ∥x∥2,方法:torch.norm(x)
深度学习常用范数,如L2范 L1范数、数和弗罗贝尼乌斯范数。
5、切片问题
matlab:start:step:end
python:start:end:step
1、pd.get_dummies(独热编码处理)
思想:将pandas中的数据通过torch.tensor(DataFrame.values())转化为张量
2、导数、梯度、自动求导
梯度和导数的关系?
梯度:函数f(x)相对于x的梯度是一个包含n个偏导数的向量。
导数又分为全导数和偏导数,只有正负,没有方向。
3、概率论基础知识
fair_probs = torch.ones([6]) / 6
counts = multinomial.Multinomial(1000, fair_probs).sample()#模拟掷1000次骰子
Bayes 定理 (Bayes’ theorem)。它如下所示。通过构造,我们有乘法规则, P(A,B)=P(B∣A)P(A)。根据对称性,这也适用于 P(A,B)=P(A∣B)P(B)。假设 P(B)>0, 求解其中一个条件变量,我们得到