深度之眼Pytorch打卡(十三):Pytorch全连接神经网络部件——线性层与非线性**层
前言
无论是做分类还是做回归,都主要包括数据、模型、损失函数和优化器四个部分。数据部分在上一篇笔记中已经基本完结,从这篇笔记开始,将学习深度学习模型。全连接网络是最简单、最好理解的神经网络,于是便从这里开始。Pytorch中已经封装好了组成全连接神经网络的部件 ,即线性层与非线性**层,如果模型只是单纯的线性层叠加,最后模型也是线性的,等价于只有一个线性层,而非线性**层的加入才使得深度有了意义。本笔记的知识框架主要来源于深度之眼,并依此作了内容的丰富拓展,拓展内容主要源自对torch文档的翻译理解,所用数据来源于网络。
全连接神经网络
原先的感知机是一个智能机器,现在的感知机一般是指如下所示的一种函数。它以若干特征作为输入,将每个输入特征与其对应的权值相乘后求和,由于线性运算即加法和数乘,这里正是线性运算,所以这个操作被Pytorch
封装成为线性层。线性运算可以用矩阵乘法高效完成,如式(1)。
单纯的线性模型连XOR
这样的问题都解决不了,更不用说更复杂的分类。在线性层输出的后面加上一个非线性**函数可以解决XOR
问题,并且使得加深网络变得有意义。Pytorch将这个操作封装成了非线性**层,一个线性层,加一个非线性**层就构成了全连接神经网络的基本单元,如图1所示。
输入层一般不算入层,故如图2所示的是三层全连接网络。图中的每一个全连接层都包含上述的线性层与非线性**层。所谓全连接层,就是每一个节点都与前面所有的节点相连,并且每一个连接都独占一个权值,运算方式与式(1)相同,只是表达式是多重的复合函数。容易知道,如果某一层的节点为M
,而其上一层节点数为N
,则该层的参数有M*N
个。
全连接网络无法做太深,因为每个连接都独用一个权值,太深了参数会非常多,容易过拟合,用Drapout
可以缓解。输入也不能太多,所以输入常常是挑选好的若干个特征,以图像全像素作为输入就行不通,以一幅100*100
的灰度图像为例,输入有10000
个,若果此时第一层有100
个节点,那么第一层的参数就有10000*100
,100
万个参数,只有一层并且用的图像尺寸还不算大,就有如此庞大的参数。深层全连接网络如图2所示。