Stanford's CS231n Lecture 5 Convolutional Neural Networks 笔记
- 1. 卷积层 Convolutional Neural Layer :
我们以输入是一张32*32*3 的图像作输入为例,全连接的话,输入是一个(1,3072)的向量,然后乘以一个(10,3072)的权重矩阵,最后得到一个(1,10)的向量。然后把最后向量里的元素施加以激活函数。
然而在CNN卷积层里面,我们运算是这样的:拿一个5*5*3的filter w,在输入的图像上移动,每走一步,得到一个数字,这个数字是由图像上的那块5*5*3 和 w 的做dot product然后在加上bias得到的。注意:这里输入图像的厚度是3,那这里filter的厚度保持不变,也是3。最后我们得到的activation map的厚度是1
我们可以对原图进行多次这样的操作然后得到了多层这样的activation map
然后把这6个单层的activation map concat为一组,也就是下图的中间蓝色部分,可以看到它的厚度是6,左边粉色的厚度是3,从第一大块到第二大块,这里用了6个filters(5,5,3)。同理我们通过10个5*5*6的filter,把第二大块,(28,28,6),的这层再做CNN,得到了第三大块也就是(24,24,10)
在最后,不同大块上的东西也就提取到了不同的特征
这个过程之所以叫做*卷积*神经网络,是因为这个和信号处理里的卷积很相似。“如果大家学过信号处理应该能看得出来”小姐姐如是说道 - -
- 2. 在filter对前一层进行运算时候的细节:
方便起见,我们假设输入是(7,7,1) 然后有一个(3,3,1)的filter。每次移动的stride为2,在最后我们会得到一个3*3的输出(具体的厚度取决于filter的个数)
当输入的边长与filter的边长作差然后除以stride不能整除的时候,我们需要对输入进行padding(补全),不然的话就会漏掉最边角的像素。之于为什么padding的值是零,只是在尝试以后发现这样做没毛病- -
这一段最后的总结
- 3. CNN中的其他层(非卷积层)
3.1 Pooling 层
在一个CNN中,除了卷积层以外还有其他层,比如下图的POOL层
Pooling层的作用:就是为了降低图片的像素数量。这里有两层含义:一个是通过pooling层,图片的长宽都(图片的spatial)变小了;第二个是它不会降低厚度。
pooling层的具体实现方式有几种,这里就介绍了max pooling:
按区域等面积划分输入,然后每个区域取最大值进入下一层
3.2 Full Connected Layer (FC layer) 全连接层
这一层所做的就如本文一开始的图所示,把前一层的输出映射到最后的label上。
Comments
Post a Comment