动手学深度学习-第2章预备知识

  1.  数据操作 
    张量(Numpy-ndarray,Pytorch,TensorFlow-Tensor)
    torch.arange()
    torch.shape
    torch.numel ()张量中元素数量
    torch.reshape()改变张量的形状而不改变元素数量和元素值
    torch.randon()默认从均值为0 标准差为1 的标准高斯分布(正态分布)
    +,-,*,/,**
    torch.cat()连接 

    求和torch.sum()
     广播机制
    索引
    切片
    内存分配
    对象转换

  2. 数据预处理

    读取数据集

    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())

  3. 线性代数
    张量的运算
    哈达玛积:两个矩阵按元素乘法(数学符号) 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)
    

     范数:
    第一个性质是:如果我们按常数因子缩放向量的所有元素, 其范数也会按相同常数因子的绝对值缩放:

     

    第二个性质是熟悉的三角不等式:                                                                                        

    第三个性质简单地说范数必须是非负的:

  4. 微积分
    拟合模型的任务分解为两个关键问题:
    优化(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
    

     

     

     

     

     

     

  5. 概率

    机器学习就是做出预测。