深度学习—— 2 预备知识

2 预备知识

2.1 数据操作

n 维数组,也称为张量(tensor)。 无论使用哪个深度学习框架,它的张量类都与Numpy的ndarray类似。

但深度学习框架又比Numpy的ndarray多一些重要功能:

  • GPU很好地支持加速计算,而NumPy仅支持CPU计算
  • 张量类支持自动微分。

2.2 数据预处理

# 2.2.1 读取数据集

# 读取数据到CSV文件
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: # 创建并写入一个CSV文件
    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')

# 读取数据
import pandas as pd

data = pd.read_csv(data_file)
print(data)

# 2.2.2 处理缺失值
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2] # iloc索引器,用于分离输入数据和输出数据
inputs = inputs.fillna(inputs.mean()) # 对于inputs中缺少的数值,我们用同一列的均值替换“NaN”项
print(inputs)
print(outputs)

# 2.2.3 转换为张量格式
import torch

X = torch.tensor(inputs.to_numpy(dtype=float))
y = torch.tensor(outputs.to_numpy(dtype=float))
print(X)
print(y)

2.2.1 读取数据集

首先将数据存入CSV文件,然后使用Pandas库读取数据。

2.2.2 处理缺失值

典型的方法包括插值法删除法,插值法用一个替代值弥补缺失值,而删除法则直接忽略缺失值。

2.2.3 转换为张量格式

X=torch.tensor(X.values)

2.3 线性代数

2.3.1 矩阵的广播机制

当对两个形状不同的张量按元素运算时,可能会触发广播机制:首先,将元素逐元素地复制到一个合适的形状,以使两个张量具有相同的形状,然后再按元素运算。

广播的规则如下:

  1. 如果张量的维数不同,将维数较小的张量进行扩展,直到两个张量的维数都一样。例如,将张量的形状(2, 3, 4)和(4,)广播为(2, 3, 4)和(1, 1, 4)。
  2. 如果两个张量在某个维度上的长度是相同的,或其中一个张量在该维度上的长度为1,那么我们就说这两个张量在该维度上是相容的。例如,(2, 3, 1)和(1, 1, 4)是相容的。

注意: 两个张量的形状在任何一个维度上要么相等,要么其中一个为1。

2.4 微积分

2.5 自动微分

深度学习框架通过自动计算导数,即自动微分(automatic differentiation)来加快求导。 实际中,根据设计好的模型,系统会构建一个计算图(computational graph), 来跟踪计算是哪些数据通过哪些操作组合起来产生输出。 自动微分使系统能够随后反向传播梯度。 这里,反向传播(backpropagate)意味着跟踪整个计算图,填充关于每个参数的偏导数。

我们首先将梯度附加到想要对其计算偏导数的变量上,然后记录目标值的计算,执行它的反向传播函数,并访问得到的梯度。

2.6 概率

简单地说,机器学习就是做出预测。