卷积神经网络详解

news/2025/2/21 10:59:05/

(一)网络结构

一个卷积神经网络里包括5部分——输入层、若干个卷积操作和池化层结合的部分、全局平均池化层、输出层:
● 输入层:将每个像素代表一个特征节点输入进来。
● 卷积操作部分:由多个滤波器组合的卷积层。
● 池化层:将卷积结果降维。
● 全局平均池化层:对生成的feature map取全局平均值。
● 输出层:需要分成几类,相应的就会有几个输出节点。每个输出节点都代表当前样本属于的该类型的概率。
在这里插入图片描述

(二)卷积操作

卷积分为窄卷积、全卷积和同卷积。

(1)步长

步长(stride)表示卷积核在图片上移动的格数.
在这里插入图片描述
● 当步长为1的情况下,如图中,第二行右边的feature map块里的第二个元素3,是由卷积核计算完第一个元素4,右移一格后计算得来的,相当于图片中的前3行和第1到第4列围成的3×3矩阵与卷积核各对应元素进行相乘相加操作(3=1×1+1×0+0×1+1×0+1×1+1×0+0×1+1×0+1×1)。
● 当步长为2的情况下,就代表每次移动2个格,最终会得到一个如图8-5中第二行左边的2×2矩阵块的结果。

(2)窄卷积

窄卷积(valid卷积),从字面上也可以很容易理解,即生成的feature map比原来的原始图片小,它的步长是可变的。假如滑动步长为S,原始图片的维度为N1×N1,那么卷积核的大小为N2×N2,卷积后的图像大小**(N1-N2)/S+1×(N1-N2)/S+1**。

(3)同卷积

同卷积(same卷积),代表的意思是卷积后的图片尺寸与原始图片的尺寸一样大,同卷积的步长是固定的,滑动步长为1。一般操作时都要使用padding技术(外围补一圈0,以确保生成的尺寸不变)。

(4)全卷积

全卷积(full卷积),也叫反卷积,就是把原始图片里的每个像素点都用卷积操作展开。如图示,白色的块是原始图片,浅色的是卷积核,深色的是正在卷积操作的像素点。反卷积操作的过程中,同样需要对原有图片进行padding操作,生成的结果会比原有的图片尺寸大。
在这里插入图片描述

(三)池化层

池化的主要目的是降维,即在保持原有特征的基础上最大限度地将数组的维数变小。池化中只关心滤波器的尺寸,不考虑内部的值。算法是,滤波器映射区域内的像素点取取平均值或最大值。

1.均值池化

就是在图片上对应出滤波器大小的区域,对里面的所有不为0的像素点取均值。这种方法得到的特征数据会对背景信息更敏感一些。注意:一定是不为0的像素点,这个很重要。如果把带0的像素点加上,则会增加分母,从而使整体数据变低。

2.最大池化

最大池化就是在图片上对应出滤波器大小的区域,将里面的所有像素点取最大值。这种方法得到的特征数据会对纹理特征的信息更敏感一些。

3.反向传播

对于最大池化,直接将其误差还原到对应的位置,其他用0填入;对于均值池化,则是将其误差全部填入该像素对应的池化区域。该部分的详细算法也与反池化算法完全相同

(四)卷积神经网络的相关函数

在TensorFlow中,使用tf.nn.conv2d来实现卷积操作,使用tf.nn.max_pool进行最大池化操作。通过传入不同的参数,来实现各种不同类型的卷积与池化操作。

1 卷积函数tf.nn.conv2d

   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的图片数量,图片高度,图片宽度,图像通道数”,注意这是一个四维的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的值为’VALID’时,表示边缘不填充,当其为’SAME’时,表示填充到滤波器可以到达图像边缘。

● use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true

● 返回值:tf.nn.conr2d函数结果返回一个Tensor,这个输出就是常说的feature map。

1.1padding规则介绍

1.padding为VALID情况

    output_width=(in_width-filter_width + 1)/strides_ width(结果向上取整)output_height=(in_height-filter_height+1)/strides_height(结果向上取整)
● 输入的尺寸中高和宽定义成in_height、in_width。
● 卷积核的高和宽定义成filter_height、filter_width。
● 输出的尺寸中高和宽定义成output_height、output_width。
● 步长的高宽方向定义成strides_height、strides_ width。
**2.padding为SAME情况**``out_height = in_height / strides_height(结果向上取整)out_width  = in_width / strides_ width(结果向上取整)

``

2.池化函数tf.nn.max_pool(avg_pool)

tf.nn.max_pool(input, ksize, strides, padding, name=None)
tf.nn.avg_pool(input, ksize, strides, padding, name=None)

● value:需要池化的输入,一般池化层接在卷积层后面,所以输入通常是feature map,依然是[batch, height, width, channels]这样的shape。
● ksize:池化窗口的大小,取一个四维向量,一般是[1, height, width, 1],因为我们不想在batch和channels上做池化,所以这两个维度设为了1。
● strides:和卷积参数含义类似,窗口在每一个维度上滑动的步长,一般也是[1, stride,stride, 1]。
● padding:和卷积参数含义一样,也是取VALID或者SAME, VALID是不padding操作,SAME是padding操作。
● 返回一个Tensor,类型不变,shape仍然是[batch, height, width, channels]这种形式。


http://www.ppmy.cn/news/56825.html

相关文章

JSP设计班级学生管理系统论文

第1章 绪论 1.1 引言 Internet已经成为人们生活、工作、学习越来越离不开的平台。Web技术已经不在局限于单纯地提供信息服务,而是日益成为一个操作平台,为用户提供强大的服务功能。例如网上电子商务、社会信息数据库等。网络实现了远程通讯…

人群计数主流创新方向梳理

#「持之以恒」挑战赛-30天技术创作养成记!# Crowd counting的定义:Crowd counting is known as technique to count or estimate the total crowd present in in an image or a video stream. 母任务:The goal of Object Counting is to c…

关于python异常的总结

Python异常是在程序执行时发生的错误,可能会导致程序终止运行。 在Python中,异常处理是一种机制,它允许开发人员在程序发生异常时捕获、处理和报告这些异常,以便程序可以继续运行或在出现异常时进行优雅的退出。 在Python中&…

如何使用递归函数实现Excel列号转换列标

在Excel中,列标与列号转换是VBA开发过程中经常用到的功能,下面这篇博客为大家解释了多种方法。 【Excel列标与列号转换】 那么这篇博文的核心是“递归过程”,实现这个功能并不是必须使用递归过程,但是这也不失为一种实现方法&am…

K8S第二讲 Kubernetes集群简易版搭建步骤

安装前准备 关闭防火墙 systemctl stop firewalld systemctl disable firewalld关闭 selinux sed -i s/enforcing/disabled/ /etc/selinux/config # 永久关闭 setenforce 0 # 临时关闭关闭 swap swapoff -a # 临时关闭 vim /etc/fstab # 永久关闭 #注释掉swap这行 # /dev/mapp…

【Linux多线程编程-自学记录】05.取消线程

笔记: 1.取消函数 int pthread_cancel ( pthread_t tid ) 取消tid指定的线程,成功返回0。 但是取消只是发送一个请求,并不意味着等待线程终止,而且发送成功也不意味着tid一定会终止 2.取消状态(忽略或者响应&#xff…

智能网联汽车城市化的进程和思考

4月19日,工信部官网显示,支持湖北(襄阳)、浙江(德清)、广西(柳州)创建国家级车联网先导区。至此,车联网国家级先导区正式扩容,由4个增至7个。智能网联作为新生…

基于AI技术的智能考试系统设计与实现(论文+源码)_kaic

摘 要 随着当今世界互联网信息技术的飞速发展,互联网在人们生活中的应用越来越广泛,在线考试成为选拔人才的重要方法。实现一个基于AI技术的智能考试系统,该系统采用Java编程语言实现。通过使用自然语言处理技术和机器学习算法,该…