卷积神经网络 + 机器视觉: L5_卷积层_Pooling Mechanism (斯坦福CS231n)

完整的视频课堂链接如下:

完整的视频课堂投影片连接:

前一課堂筆記連結:

 

1. 准确率 Accuracy,2. 查全率 Recall,3. 查准率 Precision

这是个一般机器学习的时候很常用到的计算方法与概念,这边做一个补充。

 预测为正确预测为错误
实际为正确TP(True positives)FP(False positive)
实际为错误FN(False negative)TN(True negative)

1. 准确率:被预测的结果是正确的比例占总体的预测结果有多少比重。 Proportion of correct classifications (true positives and negatives) from overall number of cases. The formula goes like this:

 

        Accuracy = (TP + TN) / (TP + TN + FP + FN)

 

2. 查全率:预测结果为 positive 的情况下,真的是 positive 的比率是多少。Proportion of correct positive classifications (true positives) from cases that actually positive. The formula goes like this:

        Recall = TP / (TP + FN)

3. 查准率:真的是 positive 的情况下,多少比率是真的被预测出来是对的的比率。Proportion of correct positive classifications (true positives) from cases that are predicted as positive. The formula goes like this:

        Precision = TP / (TP + FP)

一般来说,我们无法既查全又查准,因为这两个参数天生就是对头,我们在设计模型的时候只能够根据当下面临的问题找到一个均衡点。

以下是这系列介绍的补充资料链接

 o  https://baike.baidu.com/item/%E6%9F%A5%E5%85%A8%E7%8E%87%E4%B8%8E%E6%9F%A5%E5%87%86%E7%8E%87/424630?fr=aladdin

 

Neural Network 的历史

1957s,第一个感知器被做出来,有了初步的权重输出(F(x) = Wx) 的概念,但是当时并没有反向传播的概念
1960s,第一次把这些线性关系的层,拼起来变成多层的网状结构
1986s,反向传播的理论被 Rumelhart 所提出,并且 chain rule 的方程式也因此被应用在模型里面
2006s,深度学习框架被提及,但是它还需要非常小心的初始化过程,不然就会产生梯度爆炸或是消失的结果
2012s,第一次有效的分类结果被做出来,运用深度学习框架的 Imagenet 分类器得到了很好的效果

 

Convolutional Layer 卷积层
它其实是一种方法的叫法,里面含有很多机制,最为重要的一点就是我们使用一个小的 “filter matrix” 去对一整片像素点原始数据按照一定规律的空间间隔做卷积 (convolve the filter with the image) ,得出来的 ”值“ 再被重新搜集到一个新的矩阵里面,filter matrix 移动的步距一般称为 stride。

有几个特征需要特别注意:

  • filter matrix 的 “厚度” 肯定都跟数据集一致。
  • filter matrix 的长宽与对应的 stride 步距需要完整吻合数据集的长宽,简单的说就是不能够有任何一步没走完。
  • 虽然在解释 CNN 的时候,是用很形象的方式把 filter matrix 放在一张像素点组成的图片上面扫描,但是实际运算的时候,还是也把 matrix 拉直了,才去跟也一并拉直后的原图片做卷积运算。

filter matrix 可以被认为是一种 “Weight” 的特征,每次我们要做矩阵之间 dot 运算的时候,都要把所有的像素点拉直成一行矩阵,这样才能够形象上好理解成一个 network。

一般来说,filter matrix 不会只有一个,而是很多个这样的矩阵经过卷积算法产生出对应的特征图,如下图示例:

这张图用的就是 6 个 filter matrix 去解析出特征 map,并且可以进一步把这六个新的 filter 叠在一起作为下一次用来被解析的数据集,被套上新的 filter matrix 然后不断地传递下去。

但是我们会发现只要 filter matrix 大于单位 pixel,那么随着神经网络的多层传递过程,卷积出来的总结矩阵也就越来越小,长远来看的话,这个过程是失真的,判断经过 Convolution 计算出来的结果的大小可以用这个公式:
    假设原图大小为 N * N 矩阵像素点,filter matrix 大小为 F * F 矩阵,步距为 stride
    output matrix 大小就是:[(N - F) / stride] + 1

但是我们不可能用信息量本身就小的东西去涵盖一个信息量较大的东西,为此,zero padding 这个方法就被运用到了实际情况。根据上面的计算公式,我们可以依照扫描的 stride 步长与 filter matrix 大小,判断一共有多少圈 0 元素需要被加在原始数据点周围,达到扫描前是 n 维矩阵,扫描后也是 n 维矩阵。所以加上 zero padding 后的公式:
    假设 P 为 padding 的 “圈数”,其他的参数继续沿用上面的假设
    output matrix 大小就是:[(N + 2*P -F) / stride] + 1

不過有一點需要注意的 tricky 的地方,我們在計算 filter matrix 一共有幾個 parameters 的時候,記得前面介紹為了方便運算,我們會把 Weight 被拉長後的矩陣後面補一個 1 的元素。因此,每一個矩陣 長 * 寬 * 高 得出来的数量都需要 +1 才是总攻的元素个数。

CNN 的方法可以让我们更为有效的提取图片的 “局部特征”,进而提高图像处理与识别上相较于传统的方法更高的准确性

Generally, the sequence of the methods go like this:

  • ( CONV >>> ReLU >>> CONV >>> ReLU >>> Pooling ) * n times, normally it's twice times.

 

Pooling Layer
它是一个用某种数学的规律机制有意的让数据 “失真“ 的方法,原本的矩阵元素假设 100*100 的大小,经过了 Pooling Layer 的手段后,矩阵就会被缩小成假设 60*60 的大小。但是注意这个方法只能够用来缩减矩阵的 长*宽,而本来多少层(高度)的矩阵不论经过多少次这个步骤,都还是只能维持原样。

max pooling 是我们一般常用的数学手段之一,如下图:

然而,max pooling 也只是其中一种方式去把矩阵做压缩,当然我们也可以做平均或是其他的数学运算去筛选,对于这些方法而言,并没有一个所谓 “better way” 一说,都是根据不同情况,看哪种算法最后得出来的结果好,谁就是比较优秀的。

那另一个问题就是,该怎么判断什么时候是已经缩减到足够的大小了呢?这只能够根据个人经验而论啦。

 

下节链接:卷积神经网络 + 机器视觉: L6_初始化_激励函数_BN_梯度下降 (斯坦福课堂)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值