cnn-explainer解释CNN作用过程

cnn-explainer

GitHub地址:cnn-explainer
论文地址:CNN Explainer: Learning Convolutional Neural Networks with Interactive Visualization

cnn-explainer将卷积神经网络每一个步骤全部可视化出来,能够清晰地看到每一步的操作,对于初学者理解CNN原理和计算过程是非常有帮助的。

cnn-explainer实现了一个简单的10层卷积神经网络,网络结构如下:
网络结构
根据论文原文对此插图的说明

Illustration of Tiny VGG model used in CNN EXPLAINER: this model uses the same, but fewer, convolutional layers as the original VGGNet model . We trained it to classify 10 classes of images.

可以看出该模型结构为Tiny VGG,比原始的VGG模型更加简单,最后实现了对输入图像的10分类。

输入层

输入层图像大小为64×64@3,分为RGB三通道输入

conv_1_1

第一层卷积层,这一层使用10个卷积核,由最终输出图片大小为62×62,根据文章CNN网络的搭建中提到的计算公式可以计算出各个参数。卷积核大小应为3×3,步长为1,因为使用了10个卷积核,最后得到10个特征图。

在这里,我们选择意式咖啡(espresso)的图片,然后跟踪一个卷积核来查看卷积提取特征的过程
conv1跟踪
可以非常直观的看到图片RGB三通道经过一个卷积核提取特征生成特征图的过程:将三通道分别经过卷积核计算得到的结果累加后再加上bias,如果继续点击通道图片,可以更加详细地查看计算过程

计算过程
卷积核大小为3×3,与我们之前计算结果一致。

relu_1_1

激活函数,不做详细介绍,这里使用ReLu函数,计算过程如下
ReLu1
可以看到,遇到非负值时,输出不变,当遇到负值时,输出为0,符合ReLu计算过程,最终输出维度不变,仍为62×62@10.

conv_1_2

第二层卷积层,输出特征图大小为60×60,深度仍为10不变,则说明卷积核为10个,计算可得卷积核大小为3×3,步长为1,这里与conv_1_1基本相同,区别在于这里的输入是经过conv_1_1和relu_1_1处理后的深度为10的62×62的图像,所以在卷积运算时要分别对10个维度的数据分别计算后累加再加上bias才能得到结果。

conv2

relu_1_2

激活函数,与relu_1_1作用相同,输出仍为60×60@10,不做展示。

max_pool_1

第一层池化层。
卷积神经网络中池化层的作用可以总结为以下几点

  1. 特征不变性(feature invariant)
    汇合操作使模型更关注是否存在某些特征而不是特征具体的位置
    可看作是一种很强的先验,使特征学习包含某种程度自由度,能容忍一些特征微小的位移
  2. 特征降维
    由于汇合操作的降采样作用,汇合结果中的一个元素对应于原输入数据的一个子区域(sub-region),因此汇合相当于在空间范围内做了维度约减(spatially dimension reduction),从而使模型可以抽取更广范围的特征,同时减小了下一层输入大小,进而减小计算量和参数个数
  3. 在一定程度上能防止过拟合的发生

简单来说,将卷积层的作用概括为提取图像特征,那么池化层的主要作用就是保留显著特征、降低特征维度,即压缩特征

在这里,池化层使用最大池化(Max pooling)的方法,从项目中可以看到,输入数据经过池化层后输出为30×30,深度为10,则推断出卷积核大小为2×2,步长为2,下面进一步查看池化过程。

maxpool1
从这下面这张图片可以更为明显地看出,在一次池化后图像特征被较完整的保留下来,同时降低了维度。

池化前后

在这一层之后,还有两个卷积层(conv_2_1、conv_2_2),每次卷积操作后均有一次relu操作,然后会对结果再次池化,最终输出张量为13×13@10,并对这个结果做展平后送入全连接层。

flatten层

根据13×13@10这个结果维度,可以计算出每批次张量展平后的维度应为13×13×10 = 1690,将展平后结果送入全连接层,全连接层的输入维度为1690,输出维度应为10,最后经过softmax函数将多次提取、压缩得到的特征进行分类得到10分类的概率
softmax
我们选择的图片是意式咖啡(espresso),从上图可以看到最后意式咖啡(espresso)计算出的概率也是最大的,为0.8808。

最后分类结果为espresso
分类结果

### 卷积神经网络的工作原理 卷积神经网络(Convolutional Neural Network, CNN)是一种专门用于处理具有网格结构的数据的深度学习模型,最常见的是二维图像数据[^2]。CNN通过一系列特定的操作来自动提取输入数据中的特征。 #### 特征提取层 1. **卷积层** - 卷积操作是CNN的核心部分之一。在这个过程中,一个小矩阵(称为滤波器或内核)滑过整个输入图像,在每个位置上执行逐元素乘法并求和,从而生成一个新的表示形式——特征图。这一过程能够捕捉到局部的空间模式,比如边缘、纹理等低级特征。 2. **激活函数** - 经过卷积之后通常会接一个非线性的激活函数,如ReLU(Rectified Linear Unit),它可以帮助引入非线性因素,使得网络具备更强的表现力。对于每一个经过卷积后的数值都会被传递给这个激活函数进行变换[^1]。 3. **池化层** - 池化操作主要用于减少空间维度的同时保留最重要的信息。最常见的做法是在不重叠的小区域里取最大值(Max Pooling),这不仅降低了计算复杂度而且有助于增强模型对平移不变性的鲁棒性。 #### 分类决策层 当上述步骤完成多次迭代形成多层抽象表达后,最终得到的一系列高维向量会被送入全连接层做进一步处理: - 这些高层特征将由多个完全互联的人工神经元组成的密集层来进行分类或其他类型的预测任务。最后一层往往采用softmax回归作为输出单元以获得概率分布,进而决定类别标签。 ### 应用实例 由于其卓越性能,CNN广泛应用于各种计算机视觉相关场景之中: - 图像识别:无论是自然物体还是手写字符都能达到极高的准确性; - 目标检测:不仅可以定位图片内的实体还能区分不同种类的目标; - 医学影像分析:辅助医生诊断疾病,提高医疗效率与质量; - 自动驾驶汽车感知周围环境,确保行驶安全可靠。 ```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(64, activation='relu')) model.add(layers.Dense(10)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值