一、数据操作
1.ndarray(n维数组,张量)
读写数据
//1.创建向量
x = torch.arange(12)//[0,1...11]
X = torch.arange(12,dtype=torch.float32).reshape((3,4))
Z = torch.zeros_like(Y)//形状与y相同的全零块
//2.访问张量形状(沿每个轴的长度)
x.shape
//3.张量中元素的总数
x.numel()
//4.改变张量形状
X = x.reshape(3, 4)
//5.初始化矩阵
torch.zeros((2, 3, 4))
torch.ones((2, 3, 4))
//6.元素值标准正态分布中随机采样
torch.randn(4, 4)
7.通过python列表为张量元素赋值
torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
运算符
//8.按元素运算(应用于相同形状向量)
x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x ** y //**运算符是求幂运算
//计算e^x
torch.exp(x)
//9.线性代数计算
//a.连接向量
torch.cat((X, Y), dim=0)//按0轴连接
torch.cat((X, Y), dim=1)//按1轴连接
//b.通过逻辑运算符构建二元张量
X == Y
//c.对张量中的所有元素进行求和,产生单元素张量
X.sum()
广播机制subsec_broadcasting
1.通过适当复制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状;
2.对生成的数组执行按元素操作。
索引和切片
X[-1],//选择最后一个元素
X[1:3]//选择第二个和第三个元素
X[0:2, :] = 12//1行和第2行,其中“:”代表沿轴1(列)的所有元素
节省内存
1. 避免不必要地分配内存,原地执行更新;
2. 其他引用仍然会指向旧的内存位置,无意中引用旧的参数。
//切片表示法
X[:] = X + Y
X += Y
转换为其他Python对象
a.item()//将大小为1的张量转换为Python标量
二、数据预处理pandas(数据清洗)
1.创建、读取数据集
2.处理缺失值
//插值法
inputs = inputs.fillna(inputs.mean())//同一列的均值替换“NaN”项
//类别值或离散值
inputs = pd.get_dummies(inputs,dummy_na=True)
//删除法
//转换为张量
X= torch.tensor(inputs.values)
三、线性代数linear-algebra
1.标量、向量、矩阵、张量
2.张量算法的基本性质
(1)给定具有相同形状的任意两个张量,任何按元素二元运算的结果都将是相同形状的张量
a.Hadamard积(Hadamard product)两个矩阵的按元素乘法
(2)将张量乘以或加上一个标量不会改变张量的形状,其中张量的每个元素都将与标量相加或相乘
3.降维lin-alg-reduction
//计算求和的函数
A.sum()
//指定张量沿哪一个轴来通过求和降低维度
A_sum_axis0 = A.sum(axis=0)
//平均值(可指定降维轴)
A.mean(axis=0)
4.非降维求和lin-alg-non-reduction
//sum_A在对每行进行求和后仍保持两个轴,我们可以通过广播将A除以sum_A
A / sum_A
//某个轴计算A元素的累积总和
A.cumsum(axis=1)
5.点积(Dot Product)
//点积
x, y, torch.dot(x, y)
//矩阵-向量积
torch.mv(A, x)//A的列维数(沿轴1的长度)必须与x的维数(其长度)相同
//矩阵-矩阵乘法
torch.mm(A, B)
6.范数lin-algebra-norms
向量范数是将向量映射到标量的函数
·性质1:按常数因子缩放向量的所有元素,其范数也会按相同常数因子的绝对值缩放
$$f(\alpha \mathbf{x}) = |\alpha| f(\mathbf{x})$$
·性质2:三角不等式
$$f(\mathbf{x} + \mathbf{y}) \leq f(\mathbf{x}) + f(\mathbf{y})$$
·性质3:非负性
$$f(\mathbf{x}) \geq 0$$
[$L_2$范数$\|\mathbf{x}\|$是向量元素平方和的平方根:]
$$\|\mathbf{x}\|_2 = \sqrt{\sum_{i=1}^n x_i^2}$$
[$L_1$范数,它表示为向量元素的绝对值之和:]
$$\|\mathbf{x}\|_1 = \sum_{i=1}^n|\mathbf{x}_i|$$
//L1范数
torch.norm(u)
//L2范数
torch.abs(u).sum()
三、微积分calculus
1.微积分拟合模型
优化(optimization):用模型拟合观测数据的过程;
泛化(generalization):生成有效性超出用于训练的数据集本身的模型。
2.导数和微分
可视化曲线
3.梯度subsec_calculus-grad
4.链式法则
四、自动微分autograd
深度学习框架可以自动计算导数:我们首先将梯度附加到想要对其计算偏导数的变量上,然后记录目标值的计算,执行它的反向传播函数,并访问得到的梯度。
1.反向传播梯度
2.非标量变量的反向传播
3.分离计算
4.Python控制流的梯度计算
六、概率