动手学深度学习-第2章预备知识
-
数据操作
张量(Numpy-ndarray,Pytorch,TensorFlow-Tensor)
torch.arange()
torch.shape
torch.numel ()张量中元素数量
torch.reshape()改变张量的形状而不改变元素数量和元素值
torch.randon()默认从均值为0 标准差为1 的标准高斯分布(正态分布)
+,-,*,/,**
torch.cat()连接求和torch.sum()
广播机制
索引
切片
内存分配
对象转换 -
数据预处理
读取数据集import os os.makedirs(os.path.join('..', 'data'), exist_ok=True) data_file = os.path.join('..', 'data', 'house_tiny.csv') with open(data_file, 'w') as f: f.write('NumRooms,Alley,Price\n') # 列名 f.write('NA,Pave,127500\n') # 每行表示一个数据样本 f.write('2,NA,106000\n') f.write('4,NA,178100\n') f.write('NA,NA,140000\n')
处理缺失值
fillna(inputs.mean()) -
线性代数
张量的运算
哈达玛积:两个矩阵按元素乘法(数学符号) A*B
降维:求和-调用求和函数会沿所有的轴降低张量的维度,使它变为一个标量。 我们还可以指定张量沿哪一个轴来通过求和降低维度。
A_sum_axis1 = A.sum(axis=1) #指定axis=1将通过汇总所有列的元素降维(轴1)。因此,输入轴1的维数在输出形状中消失。
平均值(mean或average)-通过将总和除以元素总数来计算平均值。
A.mean(), A.sum() / A.numel()
非降维求和
sum_A = A.sum(axis=1, keepdims=True) sum_A
沿某个轴计算
A
元素的累积总和, 比如axis=0
(按行计算),可以调用cumsum
函数。 此函数不会沿任何轴降低输入张量的维度。A.cumsum(axis=0)
点积:相同位置的按元素乘积的和
y = torch.ones(4, dtype = torch.float32) x, y, torch.dot(x, y)
矩阵-向量积:矩阵
A
和向量x
调用torch.mv(A, x)
时,会执行矩阵-向量积矩阵-矩阵乘法:矩阵乘法看作简单地执行次矩阵-向量积,并将结果拼接在一起,形成一个<span class="math notranslate nohighlight">矩阵.
B = torch.ones(4, 3) torch.mm(A, B)
范数:
第一个性质是:如果我们按常数因子缩放向量的所有元素, 其范数也会按相同常数因子的绝对值缩放:第二个性质是熟悉的三角不等式:
第三个性质简单地说范数必须是非负的:
-
微积分
拟合模型的任务分解为两个关键问题:
优化(optimization):用模型拟合观测数据的过程;
泛化(generalization):数学原理和实践者的智慧,能够指导我们生成出有效性超出用于训练的数据集本身的模型。%matplotlib inline import numpy as np from matplotlib_inline import backend_inline from d2l import torch as d2l def f(x): return 3 * x ** 2 - 4 * x def numerical_lim(f, x, h): return (f(x + h) - f(x)) / h h = 0.1 for i in range(5): print(f'h={h:.5f}, numerical limit={numerical_lim(f, 1, h):.5f}') h *= 0.1
-
概率
机器学习就是做出预测。