目录
最近由于国创项目的需要,在b站上发现了李沐老师的深度学习零基础视频,在这写点复习笔记,用来监督自己坚持一个月学完这些内容吧~
1、数据操作
首先对于pytorch我们需要使用语句进行导入
import torch
首先是一个关于张量的概念,张量在这里其实也就是一个多维数组,在pytorch内创建一个行向量可以使用torch.arange语句进行
这里我理解的arange语句意思为,可以生成一个一维的行向量,括号内的表示元素的个数。下边代码的意思为生成一个0-11元素的行向量。
x=torch.arange(12)
另外经过度娘了解到了arange的其他用法
arange(x,y,z)
其中的x表示起始位置,y表示终止位置(这里的终止位置意思为在此前终止),z表示间隔的步长。
获取张量的形状
这里可以采用shape函数,shape函数范围该张量的几行几列(以及多维也可以范围)。
而如果想知道这个张量内部一共有多少个元素,可以采用numel函数进行访问。
x.shape
x.numel()
生成特定的张量(多维数组)
对于全零与全一或者随机数的数组,可以采用以下语句进行生成.
torch.zeros((2,3,4))#生成一个三维的张量,其中高为2,三行四列
torch.ones((2,3,4))
torch.randn(3,4)#生成一个三行四列的张量,每一个元素都是从均值为0、标准差为1的标准正态分布中随机采样
同样,我们也可以对张量进行初始化,格式如下:
torch.tensor([[2,1,4,3],[2,2,3,4],[3,6,7,7]])
运算
可以对张量进行运算,如一下语句都是可以的
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#**表示的是求幂运算
torch.exp(x)#表示的是e的x方这样的运算
#两个张量进行比较,可以利用运算符“==”
x==y
#得到的是一些Fales,True的返回值
另外如果有两个tensor,可以将其使用cat函数拼接起来
torch.cat((X,Y),dim=0)#dim=0为竖向拼接,dim=1为横向拼接,dim=2位三维张量拼接
广播机制
对于两个不同维度的数组进行计算时,python默认采用广播机制,就是将现在的数组维度进行拓展,拓展的原则是利用已有的元素。
a=torch.arange(3).reshape((3,1))
b=torch.arange(2).reshape((1,2))
a,b(tensor([[0], [1], [2]]), tensor([[0, 1]]))a+b
tensor([[0, 1], [1, 2], [2, 3]]
索引和切片
我们可以利用索引才对其进行访问
X[-1]#表示访问最后一行的元素
X[1:3]#表示访问第第二行到第三行的元素
#与此同时,我们也可以采用逗号对数组中的特定元素进行访问
X[1,3]#表示访问第二行第三列的元素
2、数据预处理
python中的
os表示的是操作系统,这个库是对操作系统的封装
import os
可以利用操作系统对文件进行创建
os.makedirs(os.path.join('..', 'data'), exist_ok=True)
#os.makedirs(path, mode=0o777)前者 表示创建目录的路径
data_file = os.path.join('..', 'data', 'house_tiny.csv')
#os.path.join()会将路径使用/进行拼接
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')
也可以利用其对其进行读取与写入
with open(r'filename.txt') as f:
data_user=pd.read_csv(f) #文件的读操作
with open('data.txt', 'w') as f:
f.write('hello world') #文件的写操作
处理缺失值
为了处理缺失的数据,典型的方法包括插值和删除,其中插值用替代值代替缺失值。而删除则忽略缺失值。在这里,我们将考虑插值。
# 如果没有安装pandas,只需取消对以下行的注释:
# !pip install pandas
import pandas as pd
data = pd.read_csv(data_file)
print(data)
这里的iloc表示的是一个文件的索引,表示对所有行,第一列到第二列赋值给inputs,对所有行,第三列赋值给outputs
fillna是表示对缺失值进行填充,而mean函数的意为求均值,所以这行代码的意思为用inputs的均值,对inputs的缺失值进行填充
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
print(inputs)
get_dummies函数是对所要操作的表格进行自动转换为两列,将其增加两个分类标准
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)