一,卷积
二,卷积盒kernel的shape
其中3是由输入图像的chanle决定的,输入的图像是3通道的,那么一个kernel也需要分别对三个通道进行观察,也需要三个kernel,但是这三个kernel我们认为他是同一个kernel,因为它里面的权值是一样的。这三个kernel分别对三个通道进行卷积操作后,得到的矩阵再累加,得到最终的图片。
16决定了输出的图像的chanle,他代表有多少个卷积盒以不同的视角来观察这张图片,就比如一个卷积盒以blur的视角观察图片,另一个卷积盒以Edge的视角观察图片。一般来说,我们认为这一个dim才是卷积盒的chanle。
我们还可以发现,卷积盒还能起到改变图片chanle的作用。比如上面的例子,图片由输入的三通道变成了输出的十六通道。
三,卷积conv2d再pyt中的使用
需要注意的是传参数的时候把input_chanle放在前面,output_chanle放在后面,这和卷积盒的shape表示方法的顺序刚好是反过来的
四,池化层pooling
作用是提取特征,在发明池化pooling之前,使用向下取样subsampling来进行效果相同的操作。
所以在看年代比较久远的神经网络的时候,需要直到subsampling起到的就是一个pooling的作用
五,batch_norm
1.normalize
其实在之前已经使用过Normalize这个概念了,就是把数据平移到0的左右两边,符合高斯分布规律的样子
它的数学操作是求出这一对值的均值和方差,然后对每个值, 减去均值,再除以方差,这样得到的所有的值是符合上述分布的样子
如果输入的是一个三通道的图片,那么分别对每一个通道进行上述操作即可
我们知道sigmoid激活函数,在输入-4到4之间,效果是很好的,但是超过这个范围就会出现梯度弥散现象,所以经过normalize操作后,在进行sigmoid操作,可以很大程度上避免梯度弥散现象。
即使不用sigmoid激活函数,对数据进行normalize也是有实际意义的
就比如输入的数据,x都是变化很小的数据,1,2,3之类的,y都是变化很大的数据100,200,300
那么在梯度下降的时候,顺着y下降的方向,在起初会得到一个很好的效果,所以模型会趋向于向这个方向进行梯度下降操作,然后再向x下降的方向进行下降操作。相当于走了弯路,本来能直线到达的还需要拐个湾到达。
一般来说,数据集经过normalize操作后,训练的效率会提升70%
2.normalize在pyt中的使用
3.batch normalize
batch normalize实际上是另一种normalize方式
batch normalize实际上是把输入分成了c部分,每一部分代表一个chanle,他把每一个chanle的所有数据都合在了一起,包括不同张图片的同一chanle也都合在了一起做一次normalize操作。
4.batch nor在pyt中的使用
如下图所示,batchnorm实际上是可以当作神经网络中的一层的