问题的提出
常规的神经网络存在着一些致命的问题。对于大图片来说,如果使用神经网络,那么我们需要width*height*channel个weight,对于大图片来说这是难以处理的。首先这种全连接的方式是一种浪费,其次这么多weight很容易造成过拟合。
所以我们提出了cnn。
cnn的定义
cnn是很多层layer的组合。每一层都通过一个不同的函数将一种activation转化为另一种。通常使用三种layer:convolutional layer, pooling layer,和fully-connected layer。将这些layer堆积起来成为ConvNet architecture.
fully-connected层:
imageconvolutional layer:
image三种层次共同作用:
imageconvolutional layer
以32*32*3的图片为例,当我们用553的filter去处理时,他会对这片区域内的数值进行卷积操作,然后生成一个数字,随着filter在图片上的移动,数字越来越多,就会产生新的layer。我们通常称得到的layer为activation。然后使用多个不同的filter得到不同的activation层。将这些activation层堆积在一起,成为新的数据层。
image不同的layer偏向于处理不同的feature,然后这些feature共同组成可以被线性分割器分割的数据。
image1.如何移动?
filter在正方形图片上进行stride为步长的移动。最后会产生以 (N - F)/stride + 1 个像素为边长的图片。其中N是原图边长,F是filter长度,stride是步长。
2.如何避免图像shrink?
通常使用外圈补零法来解决这个问题。比如我们 553 的filter,那就要外圈补两层的0。
pooling layer
pooling layer的目的是
-
使得图片表示更小更可管理
-
对每个activation map进行独立操作
常用的是max-pooling:
image image现在也有种趋势是不再使用pooling layer/ fully connected,而是只使用conv.
fully-connected layer
fully-connected layer也就是我们在神经网络中使用的层。在上面的图示中,使用FC来表示,图示如下:
image imageReLU层
ReLu层就是使用ReLU函数对conv层的数据进行一次activation处理的层。小于0的输入被置为0,大于0的输入正常输出
cs231n assignment实现在这:https://github.com/oubindo/cs231n-cnn
网友评论