深度学习笔记一:卷积神经网络(CNN)

CNN

1.cnn的出现:代替图像中FC网络层提取feature。降低了训练的参数个数。同时提取feature时考虑到了图像中的空间信息相关性。(三维卷积则综合了时间空间相关信息)。最先学习到卷积操作的,我记得是在多媒体信号处理的课程上。当时老师将卷积和相关,讲了整整一节课。
卷积与相关最大的区别是,卷积再操作之前将kernel反转。然后与信号函数操作。
但是在深度学习CNN中,由于CNN kernel是带学习到的参数,所以没有这个操作。
如下图卷积核扫过的区域是共享权值的。权值包括weight和bias。
在这里插入图片描述
计算公式为:
在这里插入图片描述
这个公式计算结果为卷积后的featuremap对应(j,k)位置的元素值。sigma为激活函数,增加了非线性变换的操作。

2.经典的CNN结构lenet-5在这里插入图片描述
是比较原始的CNN网络,根据上图【卷积层+pool】*n->featuremap->FC->classfication
现在的很多主流CNN结构例如resnet,Google Inception Net等,在这个基础上改进。几种主要CNN对比https://blog.csdn.net/maxiao1204/article/details/65653781

3.CNN中的公式计算:
参数的种类包括,kernel size(一般是mxm),kernel height(kernel的个数),stride(kernel扫过跳过去的距离),padding种类。
以tensorflow为例:
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)

对于[filter_height, filter_width, in_channels, out_channels]的filter,input输入shape为[height,width,in_channels],pad大小针对不同pading mode不同。

padding为valid形式:
在这里插入图片描述
根据上图可以总结出valid的输出为[ceil((height-filterheight+1)/stride_h),ceil((width-filterwidth+1)/stride_w),output_channels]

padding 为same时,卷积核中心对应图片原来的节点。
在这里插入图片描述
根据上图可以总结出valid的输出为[ceil(height/stride_h),ceil(width-/stride_w),output_channels]

full 模式:在kernel和input开始有交集的地方开始做卷积
在这里插入图片描述
根据上图可以总结出valid的输出为[ceil((height+filterheight-1)/stride_h),ceil((width+filterwidth-1)/stride_w),output_channels]

从输出可以计算出原input需要padding的大小。

猜你喜欢

转载自blog.csdn.net/yuwenqi123456/article/details/87932834