动手学深度学习1

92 阅读3分钟

安装jupyter

  • pip install jupyter d2l torchvision 下载jupyter

jupyter是一款Python编程语言或其他编程语言的,交互式集成开发环境

git clone到电脑本地,并用jupyter notebook打开

Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码运行代码,代码的运行结果也会直接在代码块下显示的程序。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释

数据操作

N维数组是机器学习和神经网络的主要数据结构

  • 3-d RGB图片; 4-d RGB图片批量

  • 创建数据需要

    • 形状:例如3✖️4矩阵
    • 每个元素的数据类型
    • 每个元素的值
  • 三维数组:有x,y,z三个平面数组

    • int a[1][3][4] = {{{1,2,3,4},{1,2,3,4},{1,2,3,4}}}; x=1表示一个一维数组,y=3表示一个一维数组中有三个一维数组,z=4表示3个一维数组里有四个一维数组
  • 访问元素

    • 数组[1,2] :第一行第二列

线性代数

  • 特征向量:不被矩阵改变方向的向量
  • 特征值:对称矩阵总是可以找到特征向量

数组操作

x = torch.arange(12,dtype=torch.float32).reshape(3,4)
y = torch.tensor([[2.0,1,4,3],[1,2,3,4],[4,3,2,1]])
torch.cat((x,y),dim=0),torch.cat((x,y),dim=1)
# dim=0,是在第一个维度合并 , dim=1,是在第二个维度合并

数据处理

以易于机器理解的方式存储数据的文件格式称为机器可读格式。常见的机器可读格式包括:

  • CSV(逗号分隔值)
  • JSON(javascript对象符号)
  • XML(可扩展标记语言)

CSV

  • 以列表的格式读取CSV文件
import csv

csvfile = open('./data.csv', 'r')
reader = csv.reader(csvfile)

for row in reader:
    print(row)
  • 以字典的格式读取
import csv

csvfile = open('./data.csv', 'r')
reader = csv.DictReader(csvfile)

for row in reader:
    print(row)

数据的预处理

创建人工数据集

截屏2023-09-22 08.41.33.png

处理缺失项

处理缺失项有两种方法,这里用的是插值法

inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]  #iloc就是indexlocation
inputs = inputs.fillna(inputs.mean(numeric_only=True))  #填值,mean就是均值
print(inputs) 

mean()函数默认为numeric_only=True,也就是仅对数字类型的列生效。但是后面的版本可能会默认为false,这样必须选取数字类型的列或者指定为True才可以使用。因此,我们直接指定为True

输出结果:

截屏2023-09-22 08.43.48.png

补全字符串值

mean函数无法对字符串处理。因此对于inputs中的类别值或离散值,我们将“NaN”视为一个类别。比如RoofType列有"Pave"和“NaN”两个类别,pandas会自动将一列转化为两列,分别命名为“RoofType_Pave”和“RoofType_NaN”,并且转化为的两列中,每一行等于该列对应的类别的取1,否则取0。类似于onehot编码形式

inputs = pd.get_dummies(inputs, dummy_na=True,dtype=int)
print(inputs)

get_dummies方法可以把离散的类别信息转化为onehot编码形式, 
dummy_na=True意为是否把nan单独看做一个类别。 dtype=int,将输出的true和false转换成0和1

转换成张量形式

现在数据都是数值,可以转换成张量了

截屏2023-09-22 08.57.39.png


补充:reshape()不会改变地址