经典博客/教程
卷积神经网络的简单了解
知乎上对于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
原文:
版权声明:本文为博主原创文章,转载请附上博文链接!





































苏公安网备 32011402010933号