首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

卷积神经网络VGG16这么简单,为什么没人能说清?

向AI转型的程序员都关注了这个号

很多人想入门做深度学习,但往往翻遍网络看完一篇又一篇所谓的“入门教程”,paper,包括很多深度学习框架官方给出的案例,给人的感觉真的是从入门到放弃。写教程的作者有很多都是技术大神,但写出的东西真的是把原本简简单单的理论说得晦涩难懂,模凌两可。比如说VGG16,都是摆上从论文里截过来的下面这张图:

或者给出像下面的架构图:

对于数据从输入到输出,中间是如何变化的,神经元个数,参数个数又是怎么变化的,如何自己设计一个合理的CNN网络等等,没有教程能把这些说清楚,推荐看吴恩达老师的课程视频,对英文不好的童鞋其实是很吃力的。入门其实并不难,内容也不难理解,倒是被千篇一律的教程带进沟来。

VGG16本来就简单,但是越简单的东西"大牛"们往往不想去解释,说是“入门教程”,基础的不解释怎么教人入门。

一张图片如何作为输入?

如下图,彩色图像有RGB三个色值通道,分别表示红、绿、蓝,每个通道内的像素可以用一个像下图右边的二维数组表示,数值代表0-255之间的像素值。假设一张900*600的彩色的图片,计算机里面可以用 (900*600*3)的数组表示。

什么是卷积

卷积过程是基于一个小矩阵,也就是卷积核,在上面所说的每层像素矩阵上不断按步长扫过去的,扫到数与卷积核对应位置的数相乘,然后求总和,每扫一次,得到一个值,全部扫完则生成一个新的矩阵。如下图

卷积核如何设置可以参考

卷积神经网络的卷积核大小、个数,卷积层数如何确定呢?

一般取(3,3)的小矩阵,卷积核里面每个值就是我们需要寻找(训练)的神经元参数(权重),开始会随机有个初始值,当训练网络时,网络会通过后向传播不断更新这些参数值,直到寻找到最佳的参数值。如何知道是“最佳”?是通过损失函数去评估。

卷积核的步长是指卷积核每次移动几个格子,有横行和纵向两个方向。

卷积操作相当于特征提取,卷积核相当于一个过滤器,提取我们需要的特征。

如下图,左边小红色框是卷积核,从左上角扫到右下角,最终得到右边的特征图谱。

什么是Padding

卷积操作之后维度变少,得到的矩阵比原来矩阵小,这样不好计算,而我们只是希望作卷积,所以我们需要Padding,在每次卷积操作之前,在原矩阵外边补包一层0,可以只在横向补,或只在纵向补,或者四周都补0,从而使得卷积后输出的图像跟输入图像在尺寸上一致。

比如:我们需要做一个300*300的原始矩阵的卷积,用一个3*3卷积核来扫,扫出来结果的矩阵应该是:298*298的矩阵,变小了。

卷积前加Padding操作补一圈0,即300*300矩阵外面周围加一圈“0”,这样的300*300就变成了302*302的矩阵,再进行卷积出来就是300*300 ,尺寸和原图一样。

什么是池化(pooling)

卷积操作后我们提取了很多特征信息,相邻区域有相似特征信息,可以相互替代的,如果全部保留这些特征信息就会有信息冗余,增加了计算难度,这时候池化就相当于降维操作。池化是在一个小矩阵区域内,取该区域的最大值或平均值来代替该区域,该小矩阵的大小可以在搭建网络的时候自己设置。小矩阵也是从左上角扫到右下角。如下图

什么是Flatten

Flatten 是指将多维的矩阵拉开,变成一维向量来表示。

什么是全连接层

对n-1层和n层而言,n-1层的任意一个节点,都和第n层所有节点有连接。即第n层的每个节点在进行计算的时候,激活函数的输入是n-1层所有节点的加权。像下面的中间层就是全连接方式。

什么是Dropout

dropout是指在网络的训练过程中,按照一定的概率将网络中的神经元丢弃,这样有效防止过拟合。

现在我们来看看VGG16的整天架构图:

从左至右,一张彩色图片输入到网络,白色框是卷积层,红色是池化,蓝色是全连接层,棕色框是预测层。预测层的作用是将全连接层输出的信息转化为相应的类别概率,而起到分类作用。

可以看到 VGG16 是13个卷积层+3个全连接层叠加而成。

以下是一个基于kares 的VGG6 代码:

完整代码地址:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180715G133TL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券