网站首页 > 技术文章 正文
前言
众所周知,卷积神经网络(Convolutional Neural Network, CNN)通常是被用在图像识别领域的,其实还可以应用于语音识别,文本分类等多个领域。写这篇文章主要是为了介绍TextCnn文本分类模型,当然也会详细介绍CNN的具体内容,并辅以相关的案例。当然,这里默认读者对神经网络有一定的了解和认识,如果有疑问可留言,本文也不介绍太多关于数学的内容,以便于读者理解,如有需要后期更新相关数学推导。
1 卷积神经网络简介
通常有:
- 数据输入层/ Input layer
- 卷积计算层/ CONV layer
- 池化层 / Pooling layer
- 全连接层 / FullConnect layer
- 输出层 / Output layer
当然也还包括神经网络常用的激活层,正则化层等。
模型训练完毕后,对图像分类的主要过程如下:
当然,我们的主要工作还是构建CNN模型以及使用相关数据进行模型训练,以使得模型能够提取数据特征进行更好的分类。下面就对各个层以及神经网络的核心模块进行介绍。
2 卷积层
卷积层是卷积神经网络的核心层,核心的处理方式就是卷积(Convolution)计算。卷积其实也就可以看成一个函数或者一种算法。这个函数则需要输入数据和卷积核,按照卷积要求进行计算。我们可以通过下面的图形简单理解一下,假设我们有一个5x5的矩阵和一个3x3的卷积核(进行卷积计算所需要的两个参数),如下:
卷积核就是从输入矩阵从左到右,从上到下进行计算,计算过程如下:
输入矩阵对应的虚线框体大小就是卷积核形状的大小,然后虚线框对应元素与卷积核中的对应元素相乘求和就得出结果4。然后虚线框向右移一个单位(后面还会用到)计算第二个值,然后再移动一个单位计算第三个值,那么第一行就计算完毕了。需要注意的是,虚线框的大小要与卷积核大小保持一致。同理可计算第二行,如下:
一次类推计算出所有结果。经过卷积计算的结果就是一个3x3的矩阵。总结一句话就是移动窗口,对应值计算相加即可。
可以看出,卷积层其实是提取图像特征的过程。另外深思一下:摆在我们面前的问题有:卷积核如何确定?卷积核为啥只移动一个单位?移动过程超出边界不可以吗?
2.1 卷积核
卷积核在图像识别中也称过滤器。比较简单的过滤器有:Horizontalfilter、Verticalfilter、Sobel Filter等。这些过滤器能够检测图像的水平边缘、垂直边缘、增强图像区域权重等,这里不做细致探究。其实,过滤器的作用类似于标准(例如全连接层)的权重矩阵W,需要通过梯度下降算法反复迭代求得。而卷积神经网络的主要目的就是计算出这些卷积核。
2.2 步幅
在前面的计算中可以看出,通过向右,向下移动一个单位的卷积核大小的窗口计算得到卷积结果。其实这个卷积核大小的窗口向右,向下移动的格数(单位)成为步幅(strides),上面每次移动一格,那么对应的strides就为1。在图像处理中就是跳过像素的个数了。这个步幅也不是固定不变就是1,可结合实际场景改变。并且在移动的过程中,卷积核中的值不变是共享的。这也就大大降低了参数的数量。
2.3 填充
从上面的计算结果可以看出,输入是一个5x5的矩阵,经过卷积核计算后,输出就变成了3x3的结果。如果你想再次输入大小为5x5的矩阵怎么办?这时我们就需要对原始输入的5x5大小的矩阵做一下处理——填充(padding),在扩展区域补0。根据之前计算过程,只要向右向下各多移动两次即可得到5x5的计算结果,那么对输入矩阵补齐得到如下结果:
现在结合输入矩阵大小n、卷积核大小f、padding(补0圈数)计算输出矩阵大小p、步幅大小为s,公式如下:
当然这里默认输入的数据长宽一致,如果长宽不同,则需根据具体情况具体分析。
拓展: 实际中的图片是三通道的,即:RGB通道,而对于视频又会多个帧数通道。其实多通道时,每个通道对应一个卷积核即可。
2.4 激活函数
为了保证对数据非线性处理,也需要激活函数,也就是激活层的处理。其处理方式是,为卷积核的每个元素添加一个bias(偏移值),然后送入诸如relu、leakyRelu、tanh等非线性激活函数即可。
3 池化层
在经过卷积层之后,其实就可以通过全连接层后接softmax进行分类输出图片类别了,但是这个时候,数据量依然是特别大的,也就面临着巨大的计算量挑战。池化(Pooling)又称下采样,可以进一步降低网络训练参数和模型过拟合的程度。
常用的池化处理有一下几种:
- 最大池化(Max Pooling):选择Pooling窗口中的最大值作为采样值
- 均值池化(Mean Pooling):将Pooling窗口中的所有值加起来取平均,使用平均值作为采样值
- 全局最大(或均值)池化:取整个特征图的最大值或均值
假如我们有如下提取特征的结果值:
以及假定池化的窗口大小为2x2,步幅为1,那么几种池化过程如下:
池化层在cnn中可用来较小尺寸,提高运算速度及减小噪声影响,让个特征更具健壮性。
4 全连接层和输出层
这部分主要连接最后池化后的结果,将池化后的数据展平构成全连接层的输入。然后就是根据类别数构建的一个分类层,也就是输出层,对于分类任务输出层则添加一个sigmoid层计算需要分类的图片各个类别的概率。对于训练任务,则使用损失函数开始反向传播更新模型中的卷积核。
总结
卷积神经网络的大致流程如此,实际中则需要灵活多变。卷积神经网络发展非常迅速,相关技术比较成熟,应用也比较广泛。比较有代表性性的模型有:
- LeNet-5
- AlexNet
- VGG
- GoogleNet
- ResNet
- 胶囊网络
对此感兴趣的可以深入了解。下面一篇文章将结合Pytorch以及CIFAR-10数据集做一个利用卷积神经网络分类的任务,以夯实对卷积神经网络的理解以及Pytorch的熟练使用。
猜你喜欢
- 2024-10-22 彻底搞懂CNN中的卷积和反卷积 cnn卷积计算公式
- 2024-10-22 Python MTCNN(人脸检测)项目附代码讲解(2)-NMS/IOU工具介绍
- 2024-10-22 谷歌大脑用强化学习为移动设备量身定做最好最快的CNN模型
- 2024-10-22 STFGNN:用于交通流预测的时空融合图神经网络
- 2024-10-22 通过 Python 中的 Keras 示例了解 CNN 基础知识
- 2024-10-22 CNN中一些特殊环节的反向传播(面试要点)
- 2024-10-22 为何Keras中的CNN是有问题的,如何修复它们?
- 2024-10-22 用Keras实现一个标准的CNN! keras实现gan
- 2024-10-22 卷积神经网络CNN完全指南终极版(二)
- 2024-10-22 二项式定理问题(1):通项公式 二项式定理问题
你 发表评论:
欢迎- 11-18软考系统分析师知识点十六:系统实现与测试
- 11-18第16篇 软件工程(四)过程管理与测试管理
- 11-18编程|实例(分书问题)了解数据结构、算法(穷举、递归、回溯)
- 11-18算法-减治法
- 11-18笑疯了!巴基斯坦首金!没有技巧全是蛮力!解说:真远啊!笑死!
- 11-18搜索算法之深度优先、广度优先、约束条件、限界函数及相应算法
- 11-18游戏中的优化指的的是什么?
- 11-18算法-分治法
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)