一.深度学习的介绍
深度学习是机器学习(手动进行特征提取)的分支,是一种以人工神经网络为架构,对数据进行特征学习(自动进行特征提取)的算法。深度学习应用场景多样,自行百度搜索。
1.区别
a.1.机器学习需要有人工特征提取的过程;
2.机器学习数据少
b.1.深度学习每有人工特征提取的过程,特征提取的过程可以通过深度神经网络自动完成
2.深度学习需要大量的训练数据集,会有更高的效果,深度学习训练深度神经网络需要大量的算力,因为其中有更多的参数
2.框架
使用facebook出的pytorch(语法和python相同),使用动态计算,代码调试更简单。
二.神经网络的介绍
人工神经网络,简称神经网络,模仿生物神经网络的结构和功能的数学模型,用与对函数进行估计或近似。(应用例如机器视觉和语言识别)
1.神经元(最小的神经网络结构,神经网络结构基础单元,相互连接组成神经网络)
生物神经网络作用机理请参考高中生物教程
2.单层神经网络
3.感知机(两层神经网络)
作用:把n维向量空间用一个超平面分割成两部分,给定一个输入向量,超平面可以判断这个向量位于超平面的那一边。简单的二分类模型,给定阈值,判断数据属于哪一部分。
4.多层神经网络
输入层和特征数量差不多,输出层和分类类别数量差不多
全连接层:第n层和第n-1层中神经元两两之间都有链接
5.激活函数
所以需要激活函数,重要作用,增强模型的非线性分割能力,提高模型稳健性(拟合更多的不同的数据,效果更好),缓解梯度消失问题,加速模型收敛(模型训练得更快)等
系统:函数,f,模型,f(x)=y
线性则有f(x1+x2)=y1+y2;f(kx1)=ky1
像素点(随意组合)-->高级特征-->更高级特征(知道得出结果)
三.pytorch安装方法(自行搜索最新安装方法)
四.张量Tensor
1.各种数值数据称为张量
1.0阶张量:标量,常数
2.1阶张量:向量
3.2阶张量:矩阵
4.3阶张量
5.n阶张量
2.张量的创建方法
1.torch.tensor(list)使用python中的列表和序列创建tensor,或者使用numpy中的数组创建
2.torch.empty()/zeros/ones
3.torch.rand()/randint()/randn()
3.张量的常用方法和属性
1.获取tensor()中的数据(当tensor中只有一个数据可用时)tensor.item()
2.转化为numpy数组 z.numpy()
3.获取tensor形状,tensor.size(),括号里填入数据表示获取某一个维度的形状
4.(数据拉伸成一整条,然后按照每块大小切分)形状改变,tensor.view(),浅拷贝,不赋值的话不会改变
5,获取维数 tensor.dim
6.tensor.max(),tensor.min(),tensor,std()
7.(拉成一整条,如(3,2,4),先分3块,每块切成2部分,再每块切成4部分)转置 tensor.transpose()(括号里写两个维度,转置这两个维度),tensor.permute()(口号里可以写多个维度,转置多个维度)
8.获取值以及复制如 tensor[1,3]获取第一行第三列的值,可对其赋值tensor[1,3]=100;
9,tensor 的切片tensor[0,:,:]获取第一维度的值
4.tensore的数据类型
1.获取tensor的数据类型:tensor.dtype
2.创建数据的时候指定类型 torch.tensor(array,dtype) torch.ones(array,dtype)
3.类型的修改 tensor.float()/long()/int()
4.torch.tensor和torch.Tensor的区别
torch.Tensor和torch.FloatTensor一样,传入数字时表示生成tensor的形状,内容随机填充,当传入列表或可迭代对象时,才表示创建一个内容已知的tensor,torch.tensor为创建tensor的方法
5.tensor和tensor 相加 直接x+y 或者torch.add(x,y)或者x.add(y),x.add_(y)(对x进行修改,把y加到x上)带有下划线的方法意思就是进行就地修改
6.tensor和数字进行运算 x+10
7.CUDA中的tensor
CUDA是NVIDIA推出的运算平台,CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能解决复杂的计算问题。torch.cuda这个模块增加了对CUDA tensor 的支持,能够在cpu和gpu上使用相同的方法操作tensor。通过.to方法能够把tensor转移到另一个设备(比如从cpu转到gpu)
#device=torch.device("cuda:0") if torch.cuda.is_availble() else "cpu") (当电脑支持CUDA,字符串是CUDA,否则是CPU,还可指定是哪块PU)
实例化一个device,每个tensor“to”以下就好了
a,实例化device:torch.device=torch.device("cuda:0") if torch.cuda.is_availble() else "cpu")
b.tensor.to(device)#把tensor转化为CUDA持的tensor,或者cpu支持的tensor支
五.梯度下降和反向传播
梯度就是一个向量,导数+变化最快的方向(学习前进的方向)
1.梯度下降
a.算出梯度
b.w=w-aw'使得loss最小