深度学习笔记(一):卷积,池化

问题的提出

常规的神经网络存在着一些致命的问题。对于大图片来说,如果使用神经网络,那么我们需要width*height*channel个weight,对于大图片来说这是难以处理的。首先这种全连接的方式是一种浪费,其次这么多weight很容易造成过拟合。

所以我们提出了cnn。

cnn的定义

cnn是很多层layer的组合。每一层都通过一个不同的函数将一种activation转化为另一种。通常使用三种layer:convolutional layer, pooling layer,和fully-connected layer。将这些layer堆积起来成为ConvNet architecture.

fully-connected层:

image

convolutional layer:

image

三种层次共同作用:

image

convolutional layer

以32*32*3的图片为例,当我们用553的filter去处理时,他会对这片区域内的数值进行卷积操作,然后生成一个数字,随着filter在图片上的移动,数字越来越多,就会产生新的layer。我们通常称得到的layer为activation。然后使用多个不同的filter得到不同的activation层。将这些activation层堆积在一起,成为新的数据层。

image

不同的layer偏向于处理不同的feature,然后这些feature共同组成可以被线性分割器分割的数据。

image

1.如何移动?

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
image

ReLU层

ReLu层就是使用ReLU函数对conv层的数据进行一次activation处理的层。小于0的输入被置为0,大于0的输入正常输出

cs231n assignment实现在这:https://github.com/oubindo/cs231n-cnn

你可能感兴趣的:(深度学习笔记(一):卷积,池化)