第五讲卷积神经网络

深度学习中的卷积神经网络及其应用详解
本文深入探讨了卷积神经网络(CNN)的工作原理,包括卷积计算过程、感受野、全零填充、批标准化、池化和舍弃等核心概念,并通过TensorFlow库展示了如何构建和训练CNN模型。文章还介绍了LeNet、AlexNet、VGGNet、InceptionNet和ResNet等经典网络结构,以及CIFAR10数据集在图像分类任务中的应用。

本讲目标

用CNN实现离散数据的分类(以图像分类为例)

  1. 卷积计算过程
  2. 感受野
  3. 全零填充(Padding)
  4. TF描述卷积计算层
  5. 批标准化(Batch Normalization, BN)
  6. 池化(Pooling)
  7. 舍弃(Dropout)
  8. 卷积神经网络
  9. cifar10数据集
  10. 卷积神经网络搭建示例
  11. 实现LeNet、AlexNet、VGGNet、InceptionNet、ResNet五个经典神经网络

1、卷积计算过程

全连接神经网络:每个神经元与前后相邻层的每一个神经元都有连接关系,输入是特征,输出为预测的结果。

卷积:

  • 卷积计算可认为是一种有效提取图像特征的方法
  • 一般会用一个正方形的卷积核,按指定步长,在输入特征图上滑动,遍历输入特征图中的每个像素点。每一个步长,卷积核会与输入特征图出现重合区域,重合区域对应元素相乘、求和再加上偏置项的带输出特征的一个像素点。
  • 必须让卷积核的深度与输入特征图的深度一致,卷积核的通道数与输入特征图的通道数一致。

输入特征图的深度(channel数),决定了当前层卷积核的深度;每个卷积核在卷积计算后,会得到一张输出特征图,当前层用了几个卷积核,就会有几张输出特征图,所以,当前卷积核的个数,决定了当前输出特征图的深度。在这里插入图片描述
单通道输入特征图的卷积计算
在这里插入图片描述
三通道输入特征图的卷积计算过程
在这里插入图片描述

2、感受野

卷积神经网络各输出特征图中的每个像素点,在原始输入图片上映射区域的大小。

3、全零填充

有时会希望输出特征图的尺寸保持不变,这个时候可以使用全零填充。

卷积输出特征图维度的计算公式:

  • 使用全零填充时,输出特征图边长: 输 入 特 征 图 边 长 步 长 \frac{输入特征图边长}{步长} (向上取整)
    在TF中用padding = ‘SAME’ 表示使用全零填充
  • 不使用全零填充时,输出特征图边长: 输 入 特 征 图 边 长 − 核 长 + 1 步 长 \frac{输入特征图边长-核长+1}{步长} +1(向上取整)
    在TF中用padding = 'VALID’表示不使用全零填充

4、TF描述卷积计算层

tf.keras.layers.Conv2D(
	filters = 卷积核个数,
	kernel_size = 卷积核尺寸,  # 正方形写核长整数,或(核高h, 核宽w)
	strides = 滑动步长,  # 横纵向写相同步长整数,或(纵向步长h,横向步长w),默认1
	padding = "same" or "valid",  # 默认valid
	activation = "relu" or "sigmoid" or "tanh" or "sofmax",  # 如有BN此处不写
	input_shape = (,, 通道数)  # 输入特征图维度,可省略
)

5、批标准化

标准化:使数据符合0均值,1为标准差的分布
批标准化:对一小批数据(batch),做标准化处理。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过上面的简单处理,会使数据完全符合标准正态分布,使激活函数丧失了非线性特性,因此为每个卷积核引入了两个可训练参数,缩放因子γ和偏移因子β。
在这里插入图片描述
在这里插入图片描述
BN层位于卷积层之后,激活层之前
TF描述标准化:

tf.keras.BatchNormalization()

model = tf.keras.models.Sequential([
	Conv2D(filters=6, kernel_size=(5
### 卷积神经网络的工作流程及主要步骤 卷积神经网络(Convolutional Neural Network, CNN)是一种专门设计用于处理具有网格状拓扑结构的数据深度学习模型,其广泛应用领域包括但不限于图像分类、目标检测、自然语言处理等[^2]。CNN 的核心在于通过一系列特定的操作提取数据中的特征并完成预测任务。 #### 数据准备阶段 在实际应用中,首先需要准备好适合 CNN 输入数据形式。对于二维卷积神经网络而言,输入通常是二维或三维数组,例如 RGB 图像由高度、宽度和颜色通道组成[^4]。这些数据经过预处理后被送入网络的第一层。 #### 主要步骤解析 1. **卷积层 (Convolutional Layer)** 卷积层是 CNN 中最重要的组件之一,负责从输入数据中提取局部特征。它通过对输入执行滑动窗口操作实现这一目的,在每次移动过程中计算一个小区域内的加权求和结果形成新的表示[^2]。此过程能够有效捕捉空间上的模式比如边缘或者纹理信息。 2. **激活函数 (Activation Function)** 经过卷积运算之后紧接着会施加一种非线性变换即所谓的“激活”,常用的是 ReLU 函数(Rectified Linear Unit),它可以使得只有正值得以保留而负值则变为零从而增加表达能力同时减少梯度消失现象的发生几率[^3]。 3. **池化层 (Pooling Layer)** 池化层的作用是对前一层输出做降采样(down-sampling),目的是降低维度大小进而减少后续计算量同时也增强了对平移不变性的鲁棒特性。最大池化(Max Pooling)是最常见的方法之一,选取每个小块内最大的数值作为该位置的新值。 4. **全连接层 (Fully Connected Layers)** 当特征图经过多次卷积与池化之后变得非常紧凑时,则可将其展成向量并与传统的人工神经元相连构成最后几层用来做出最终决策的部分称为全连接层。这里每一个节点都与其他所有来自前面一层的所有节点相联系并通过权重调整来进行分类或其他类型的回归分析等工作[^3]。 5. **损失计算与反向传播 (Loss Calculation and Backpropagation)** 完成了正向传递得到预测结果后还需要衡量误差程度以便指导参数更新方向这就是所谓的目标函数或者说代价/损失函数(loss function);随后利用链式法则沿着整个网络逐级回传错误信号直至达到全局最优解为止的过程叫做反向传播算法(back propagation)[^1]。 6. **迭代优化** 整个训练周期包含若干轮次(epoch),每一轮都会经历完整的数据集遍历,并不断重复上述提到的各项操作直到满足停止条件如达到预定的最大epoch数或者是验证集合表现不再提升等情况才结束整个流程[^1]。 ```python import tensorflow as tf from tensorflow.keras import layers, models model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Flatten()) model.add(layers.Dense(10)) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值