文档开发者中心
我的

卷积神经网络的实现

最近开始学神经网络一个很重要的分支——卷积神经网络。什么是卷积神经网络,卷积神网络用来干什么,卷积神经网络比普通神经网络优越在哪儿,相信这些问题你都能在以下一些比较经典的博客或者教程中找到很好的答案,本篇博客,只是从我的角度来总结一下我所了解的卷积网络,做一个中间学习过程的巩固与拓展。
经典博客/教程
卷积神经网络的简单了解
知乎上对于CNN的直观解释
斯坦福大学CS231n课程的深入笔记
图像分类

  谈CNN就不能不谈图像分类。卷积神经网络是一种专门来处理具有类似网格结构数据的神经网络,例如时间序列数据,图像数据。为什么说CNN也可用于时间序列数据呢?因为我们数据中所采用的时间,可以理解为是在时间轴上的一种按照一定规律采样的一维网格数据。但是卷积神经网络应用最多的,应该是图像分类领域。
  图像分类问题涉及的方向很广,比如物体检测、图像分割、目标跟踪、背景建模……而在图像分类领域,所面临的困难与挑战也很多。相信大家在一些视频教学的开头也曾经看到(比如CS231n),其中有:
- Viewpoint variation  同物体可以从不同角度拍摄
- Scale variation  物体可视的大小通常有变化
- Deformation  很多物体形状会有所变化
- Occlusion 目标物体可能被挡住
- Illumination conditions 在像素层面上,光照影响很大
- Background clutter 背景干扰
- Intra-class variation 类内差异
诸多挑战。同样在设计算法进行图像方面的处理时,我们也要考虑到这些内在的问题,达到维持分类结论稳定的同时,保持对类间差距足够明敏感。
手动实现CNN
CNN的构成
卷积神经网络的卷积层包括:

Zero Padding 零填充
Convolve window 过滤器
Convolution forward 前向传播
Convolution backward 后向传播
卷积神经网络的池化层包括:

Pooling forward 前向传播
Create mask 创建mask
Distribute value 分布值
Pooling backward 后向传播
1. Zero-padding

  每进行一次卷积和池化,数据矩阵的高度/宽度就会缩小一次。随着卷积神经网络层数的增多,高度/宽度就会一直缩小下去,直到0。采用Zero-padding可以保留住高和宽。
  同时,填充可以保留图像边缘更多的信息,让每一层图像的边缘都发挥作用,而不至于被忽略掉。

实现:np.pad,假设a是一个五维数组(比如a.shape=(5,5,5,5,5)),你想在第二维上添加pad=1,在第三维上添加pad=3,剩下其他维度上pad=0,那么你可以这么实现:


2.卷积层
Figure 1   : Dynamic demonstration of convolution

  我们先建立一个卷积的单步函数,也就是只进行一次卷积中的一次计算。函数分为三部分:接收输入,应用过滤器,进行输出。
(1) 实现 conv_single_step函数:

下面基于上面的单步函数,实现一次卷积。输入值有: A_prev(前一层的值),过滤器F的权重(用W表示),每个过滤操作都有的不同的偏移量b,还有包含了stride(步幅)和padding(填充)的 hyperparameters dictionary(参数词典)。
(2) 实现conv_forward函数:
  假定我们的过滤器大小为2×2×n,我们用vert_start、vert_end、horiz_start 和 horiz_end来准确定义每一个2×2 slice 的位置,如下图所示:






4.反向传播

  在现代的深层学习框架中, 我们只需要实现前向传递, 而深度学习框架负责向后传递, 因此大多数深学习的工程师不必费心处理向后传递的细节。卷积网络的向后传递是复杂的。但是, 如果你想要去实现,可以通过下一节的内容, 去了解什么 Backprop 在一个卷积网络中是怎么个情况。
---------------------
作者:longongng
来源:CSDN
原文:
版权声明:本文为博主原创文章,转载请附上博文链接!

点赞
收藏
回复
分享
举报
浏览870 发布于2018-12-05 02:19未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。