CNN的组成

这个最简单的卷积神经网络说到底,终究是起到一个分类器的作用
卷积层负责提取特征,采样层负责特征选择,全连接层负责分类
卷积层
1.作用
特征提取
2. 卷积核/滤波器
Filter ==kernel
每个kernel中的数字,就是weight
表示形式:filter_shape[filter高度,filter宽度,图片通道数,卷积核个数]
3. 卷积过程

和图像进行卷积(点乘),来提取特征,得到特征值destination value
4. 输入/输出
输入:
图片image [图片个数,图片高度,图片宽度,图片通道数]
输出:
特征图——feature map(几个卷积核,每张图就输出几个feature map)
5.padding
每次卷积,图像都缩小,这样卷不了几次就没了; - 相比于图片中间的点,图片边缘的点在卷积中被计算的次数很少。这样的话,边缘的信息就易于丢失。
为了解决这个问题,我们可以采用padding的方法。我们每次卷积前,先给图片周围都补一圈空白,让卷积之后图片跟原来一样大,同时,原来的边缘也被计算了更多次。

比如,我们把(8,8)的图片给补成(10,10),那么经过(3,3)的filter之后,就是(8,8),没有变。
我们把上面这种“让卷积之后的大小不变”的padding方式,称为 “Same”方式, 把不经过任何填白的,称为 “Valid”方式。
处理边界的操作,可以补0(zero padding)

6.实现
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
• input:
指需要做卷积的输入图像,它要求是一个Tensor,具有[batch, in_height, in_width, in_channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数],注意这是一个4维的Tensor,要求类型为float32和float64其中之一
• filter:
相当于CNN中的卷积核,它要求是一个Tensor,具有[filter_height, filter_width, in_channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],要求类型与参数input相同,有一个地方需要注意,第三维in_channels,就是参数input的第四维
• strides:卷积时在图像每一维的步长,这是一个一维的向量,长度4
• padding:
string类型的量,只能是”SAME”,”VALID”其中之一,这个值决定了不同的padding方式
• use_cudnn_on_gpu:
bool类型,是否使用cudnn加速,默认为true
结果返回一个Tensor,这个输出,就是我们常说的feature map
网友评论