Convolutional Neural Networks (卷积神经网络)

本文深入探讨卷积神经网络(CNN)的理论基础和计算实践,包括网络拓扑、卷积层与下采样层的结构和连接方式,以及参数计算。通过实例解析LeNet-5的参数数量,阐述CNN在图像处理中的作用,如特征提取、下采样和全连接层的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:


刚进实验室,被叫去看CNN。看了一些博客和论文,消化了很久,同时觉得一些博客存在一些谬误。我在这里便尽量更正,并加入自己的思考。如果觉得本文有哪里不妥或疑惑,请在下面发表评论,大家一起探讨。

ps: 本篇博文原本来自我在cnblogs的博客,但是在那里好像没什么人讨论这个,所以干脆连博客也迁回了csdn,还是这里朋友多。

  卷积神经网络(CNN)是deep learning的基础。传统的全连接神经网络(fully connected networks) 以数值作为输入。如果要处理图像相关的信息的话,要另外从图像中提取特征并采样。而CNN把提特征、下采样和传统的神经网络整合起来,形成一个新的网络。本文假设你已经有了简单神经网络的概念,如“层(layers)”、“神经元(neurons)”。


一. 理论基础



                                                                       图1


Α. 简单网络拓扑:

 

  如图1所示,这是一个简单的卷积神经网络 CNN。其中C层代表对输入图像进行滤波后得到的所有组成的层,也称“卷积层”。S层代表对输入图像进行下采样(subsampling)得到的层。其中C1和C3是卷积层 ,S2和S4则是下采样层。C、S层中的每一层都由多个二维平面组成,每一个二维平面是一个特征图 (feature map)。

 

 

以图1所示的CNN为例,讲讲图像的处理流程:

  图像输入网络后,通过三个滤波器(filter) 进行卷积,得到C1层的三个特征图(feature map)。C1层的三个特征图分别通过下采样得到S2层的三个特征图。这三个特征图通过一个滤波器卷积得到C3层的三个特征图,然后和前面类似,下采样得到S4层的三个特征图。最后,S4层的特征图光柵化后,变成向量。这个向量输入到传统的全连接神经网络(fully connected networks)中进行进一步的分类。

  图中的C1、S2 、C3、S4层中的所有特征图都可以用 “像素 x 像素” 定义图像大小。你会说,图像的大小不就是用像素x像素定义的么? 没错,但这里有点特殊,由于这些特征图组成了神经网络的卷积层和下采样层,而在神经网络(neural networks)中,每一层都有“神经元” (neurons) 的概念。这些特征图中的每一个像素恰恰旧就代表了一个神经元。每一层所有特征图的像素个数,就是当层网络的神经元个数,这是可以算出来的,怎么算? 再往后面看一看。

 

  

Β. 隐层(hidden layer):

 

  提到了神经元的概念之后,就可以讲述 a) CNN中C-S部分的隐层(NN部分的隐层就不在这里讲了) 还有 b) 层与层之间,神经元的连接情况的概念了。隐层就是一块黑色的面纱,它隐藏了真相,但种种蛛丝马迹(如滤波器的大小、步长,下采样的范围,偏置数等等)告诉你,你已经很逼近真相了。嗯,不扯了,就是说有了那些东西,你就可以算出神经元的数目、可学习的参数个数、神经元的连接数了。分为两种:别的层和卷积层之间的隐层、卷积层和下采样层之间的隐层。

 

1.  别的层和卷积层之间的隐层:


 滤波器(卷积核)定义:

filter_width、filter_height → 滤波范围的宽、高; 

filter_channels → 过滤图像的通道数;

filter_types → 滤波器的种类。

例: 5x5x3 → 20: 滤波器宽高

### 卷积神经网络(CNN)的原理 卷积神经网络Convolutional Neural Networks, CNN)是一种专门用于处理数据具有网格拓扑结构的任务的深度学习模型[^1]。它通过模拟生物视觉系统的分层特性来实现对输入信息的有效处理,特别擅长于图像和视频中的模式识别。 #### 基本组成单元 CNN 的核心组成部分包括以下几个主要模块: - **卷积层(Convolution Layer)**: 这一层负责执行局部感知野内的加权求和运算,从而提取输入数据的空间层次特征[^2]。 - **激活函数(Activation Function)**: 通常采用 ReLU 函数作为非线性变换工具,增强模型表达能力。 - **池化层(Pooling Layer)**: 主要作用是对特征图进行降采样操作,减少参数数量并控制过拟合现象的发生[^3]。 - **全连接层(Fully Connected Layer)**: 将前面各层所得到的高维抽象表示映射到具体类别标签上完成最终预测任务。 这些组件共同构成了一个完整的 CNN 架构,在训练过程中不断调整权重使得整个系统可以自动地从原始像素级描述逐步建立起高层次语义概念之间的联系。 ### 结构设计特点 相比于传统的全连接型人工神经网络(Fully Connected Feed Forward Network),CNN 具有如下显著优势: - 参数共享机制(Parameter Sharing Mechanism): 同一滤波器(Filter/Kernel)在整个感受域范围内重复利用相同的一组可学习系数(weights),这不仅极大地降低了总的自由度数目同时也赋予了该方法天然具备空间位移鲁棒性的特质即所谓的“平移不变性(Translation Invariance)”. - 局部稀疏交互(Local Sparse Interactions): 只考虑相邻区域间的相互关系而非全局范围内的任意两点关联情况,进一步简化了计算复杂度. 上述两项关键技术的应用使 CNN 成为了当前解决计算机视觉领域诸多难题最为有效的解决方案之一[^4]. ### 实际应用场景 由于其卓越性能表现,CNN 已经被广泛应用于多个实际场景当中,比如但不限于以下方面: - 图像分类(Image Classification) - 物体检测(Object Detection) - 面部识别(Face Recognition) 以下是基于 Python 编程语言的一个简单示例程序片段展示如何构建基础版本的 LeNet-5 模型来进行手写数字 MNIST 数据集上的实验验证工作: ```python import tensorflow as tf from tensorflow.keras import layers, models model = models.Sequential() # 添加第一个卷积层+最大池化层组合 model.add(layers.Conv2D(filters=6,kernel_size=(5,5),activation='relu',input_shape=(32,32,1))) model.add(layers.AvgPool2D(pool_size=(2,2))) # 继续堆叠更多类似的卷积+池化层... model.add(layers.Conv2D(filters=16,kernel_size=(5,5),activation='relu')) model.add(layers.AvgPool2D(pool_size=(2,2))) # Flatten 平展成向量形式送入后续 FC 层之前 model.add(layers.Flatten()) # 加入若干个 Dense(full-connected)层构成最后判别部分 model.add(layers.Dense(units=120, activation='relu')) model.add(layers.Dense(units=84, activation='relu')) # 输出层设置 Softmax 得到最后概率分布结果 model.add(layers.Dense(units=10, activation='softmax')) # 打印查看整体架构详情 print(model.summary()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值