一、深度学习名词概述:
1.人工智能:使一部机器像人一样进行感知、认知、决策、执行的人工程序或系统,其包括计算智能(具备快速计算和记忆存储)、感知智能(能做到类似于人的视听)、认知智能(能像人一样思考,有意识)三个层面
2.专家系统(知识工程):根据专家定义的知识和经验,进行推理和判断,从而模拟人类专家的决策过程来解决问题。流程为:专家首先根据需求和知识制定出适合规则,然后机器读取内容并根据规则判断分类。
3.机器学习:是在专家系统中由专家制定修改的部分改为机器根据结果反馈自动训练,是从数据中提取知识的系统。相对于专家系统,机器学习普适性更强,准确度更高。其过程为模型(问题建模,确定假设空间)->策略(确定目标函数)->算法(求解模型参数)
4.深度学习:应用了多层深度神经网络的机器学习。
二、pytorch基础
1.数据操作
(1)数组:标量[1.0]、向量(torch一般指的是行向量,列向量可有矩阵表示)[1,2,3]、矩阵[[1,2],[3,4]]、三维数组(RGB图片)、四维数组(一批RGB图片)、五维(一个视频)
(2)数组访问:[1,2],[1,:][:,1],[1:3,1:],[::3,::2]
(3)张量表示一个数值组成的数组,可有多个维度
(4)张量定义与修改
import torch
x = torch.arange(12)#顺序生成一维数组
x.shape#数组形状
x.numel()#数组元素个数
x.reshape(3,4)#修改数组形状
torch.ones((2,3,4))#生成元素全为1的数组
torch.zeros(2,3,4)#生成元素全为0的数组
torch.tensor([[2,1,3,4],[1,2,3,4],[4,3,2,1]])#自定义数组
(5)运算
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)#指数
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)#两个张量特定维度上拼接
X==Y#张量元素是否相等
X.sum()#元素求和
a = torch.arange(3).reshape((3,1))
b = torch.arange(2).reshape((1,2))
a+b#广播机制,维度相同可复制后相加
(6) 部分操作会改变地址和原地操作
before = id(Y)
Y = Y+X
id(Y)==before#地址改变
Z = torch.zeros_like(Y)#生成一个和给定数组相同的数组
print('id(Z)',id(Z))
Z[:] = X+Y
print('id(Z)',id(Z))#地址不变
before = id(X)
X += Y
id(X)==before#地址不变
(7) numpy和tensor转换以及取值
A = X.numpy()#tensor->numpy
B = torch.tensor(A)#numpy->tensor
type(A),type(B)
a = torch.tensor([3.5])
a,a.item(),float(a),int(a)#类型转化
2.数据预处理
(1)创建人工数据集,存储在csv文件
import os
import pandas as pd
import torch
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')
(2)读数据
data = pd.read_csv(data_file)
(3)处理缺失数据
inputs,outputs = data.iloc[:,0:2],data.iloc[:,2]#取值
inputs = inputs.fillna(inputs.mean())#平均值填充缺失数据
inputs = pd.get_dummies(inputs,dummy_na=True)#类别法,一类一个表示
(4)数据转换为张量
x,y = torch.tensor(inputs.values),torch.tensor(outputs.values)
3.线性代数
(1)矩阵性质
A = torch.arange(20).reshape(5,4)
A.T#转置
B = torch.tensor([[1,2,3],[2,0,4],[3,4,5]])
B == B.T#对称矩阵
A = torch.arange(20,dtype=torch.float32).reshape(5,4)
B = A.clone()#复制
A+B,A*B#矩阵简单运算
a = 2
X = torch.arange(24).reshape(2,3,4)
a+X,(a*X).shape#倍乘
x = torch.arange(4,dtype=torch.float32)
x,x.sum()#矩阵求和
A.sum(axis=0)#按轴求和
a.sum(axis=1,keepdim=True).shape#不降维求和
A.sum(axis=[0,1])
A.mean()#均值
A.mean(axis=0)#按轴均值
A.cumsum(axis=0)#按轴累加求和
y = torch.ones(4,dtype=torch.float32)
x,y,torch.dot(x,y)#点积
A.shape,x.shape,torch.mv(A,x)#矩阵向量积
B=torch.ones(4,3)
torch.mm(A,B)#矩阵乘法
u = torch.tensor([3.0,-4.0])
torch.norm(u)#L2范数---向量元素平方和的平方根
torch.abs(u).sum()#L1范数---绝对值求和
torch.norm(torch.ones((4,9)))#矩阵F范数---矩阵元素平方和的平方根
(2)矩阵求导
标量导数
亚导数
梯度
(3)正向传播与反向传播
(4)pytorch中的自动求导
x = torch.arange(4.0)
x.requires_grad_(True)#x需要求导
y = 2*torch.dot(x,x)
y.backward()#求导存于x.grad
x.grad
x.grad.zero_()#清空
x.grad.zero_()
y = x*x
u = y.detach()
z = u*x
z.sum().backward()
x.grad == u
控制流
def f(a):
b = a*2
while(b.norm()<1000):
b = b*2
if b.sum()>0:
c = b
else:
c = 100*b
return c
a = torch.randn(size=(),requires_grad=True)
d = f(a)
d.backward()
a.grad == d/a
三、感悟
了解到深度学习就是应用多层神经网络的机器学习,对于线代的矩阵求导理解不透彻,张量拼接过程难以理解,detach作用不清晰。