在实际应用中,特征比分类器更重要。原始数据经过数据预处理、特征提取、特征选择,最后经过分类预测识别得到最后的结果。在传统的机器学习中,人工会去手动的设计特征。
在深度学习中,首先选择深度学习的模型以及模型的参数,然后把收集到的数据和选择好的模型交给计算机,让计算机去优化这个深度模型中的参数。在这个过程中,人工参与的部分比较少,可能只是在前期收集数据和选择深度模型有一定程度的参与。
了解深度学习的能与不能,对我们拓展深度学习的应用的研究具有比较深刻的意义。
在这里,我们介绍视觉与语义的结合,语义slam的原理和技术框架。语义slam不仅要获得环境几何信息,还要收集个体的位置姿态和功能属性等语义信息,以获得更加智能的结果。语义slam的技术框架:语义提取(图像的处理、对图像进行识别和分割、加语义标签)+slam的定位与建图
对于多层神经网络存在的两个问题,对应的会有相应的对策。由此,才使深度学习成为了现实。
#可以是一维数组(向量)x=torch.tensor([1,2,3,4,5,6])print(x)tensor([1,2,3,4,5,6])
#可以是二维数组(矩阵)x=torch.ones(2,3)print(x)tensor([[1.,1.,1.],[1.,1.,1.]])
#可以是任意维度的数组(张量)x=torch.ones(2,3,4)print(x)tensor([[[1.,1.,1.,1.],[1.,1.,1.,1.],[1.,1.,1.,1.]],
[[1.,1.,1.,1.],[1.,1.,1.,1.],[1.,1.,1.,1.]]])x=torch.empty(5,3)print(x)tensor([[8.5919e-36,0.0000e+00,3.3631e-44],[0.0000e+00,nan,0.0000e+00],[1.1578e+27,1.1362e+30,7.1547e+22],[4.5828e+30,1.2121e+04,7.1846e+22],[9.2198e-39,7.0374e+22,0.0000e+00]])
#创建一个随机初始化的张量x=torch.rand(5,3)print(x)tensor([[0.3192,0.8946,0.0310],[0.2872,0.6571,0.9302],[0.2974,0.0274,0.7934],[0.1466,0.6276,0.1238],[0.9328,0.2548,0.7596]])
#创建一个全0的张量,里面的数据类型为longx=torch.zeros(5,3,dtype=torch.long)print(x)tensor([[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]])
#基于现有的tensor,创建一个新tensor,#从而可以利用原有的tensor的dtype,device,size之类的属性信息y=x.new_ones(5,3)#tensornew_*方法,利用原来tensor的dtype,deviceprint(y)tensor([[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]])
z=torch.randn_like(x,dtype=torch.float)#利用原来的tensor的大小,但是重新定义了dtypeprint(z)tensor([[-1.0960,-0.4387,2.0565],[-1.6043,0.1653,-0.1710],[0.9969,1.4946,1.0085],[0.8282,1.1303,0.9358],[1.0664,-0.2047,0.5249]])
Pytorch里面的Variable类型数据功能更加强大,相当于是在Tensor外层套了一个壳子,这个壳子赋予了前向传播,反向传播,自动求导等功能,在计算图的构建中起的很重要的作用。其中最重要的两个属性是:data和grad。Data表示该变量保存的实际数据,通过该属性可以访问到它所保存的原始张量类型,而关于该variable(变量)的梯度会被累计到.grad上去。
当然,流行也是曾经流行,这说明函数本身是有一定的缺陷的。
tanh首先相同的是,这两个函数在输入很大或是很小的时候,输出都几乎平滑,梯度很小,不利于权重更新;不同的是输出区间,tanh的输出区间是在(-1,1)之间,而且整个函数是以0为中心的,这个特点比sigmod的好。
一般二分类问题中,隐藏层用tanh函数,输出层用sigmod函数。不过这些也都不是一成不变的,具体使用什么激活函数,还是要根据具体的问题来具体分析,还是要靠调试的。
ReLU函数
ReLU(RectifiedLinearUnit)函数是目前比较火的一个激活函数,相比于sigmod函数和tanh函数,它有以下几个优点:
当然,缺点也是有的:
ELU函数ELU函数是针对ReLU函数的一个改进型,相比于ReLU函数,在输入为负数的情况下,是有一定的输出的,而且这部分输出还具有一定的抗干扰能力。这样可以消除ReLU死掉的问题,不过还是有梯度饱和和指数运算的问题。
PReLU函数PReLU也是针对ReLU的一个改进型,在负数区域内,PReLU有一个很小的斜率,这样也可以避免ReLU死掉的问题。相比于ELU,PReLU在负数区域内是线性运算,斜率虽然小,但是不会趋于0,这算是一定的优势吧。
我们看PReLU的公式,里面的参数α一般是取0~1之间的数,而且一般还是比较小的,如零点零几。当α=0.01时,我们叫PReLU为LeakyReLU,算是PReLU的一种特殊情况吧。