深度学习中的卷积神经网络

简介: 深度学习中的卷积神经网络

2012年,AlexNet横空出世,卷积神经网络从此火遍大江南北。此后无数人开始研究,卷积神经网络终于在图像识别领域超过人类,那么卷积神经网络有什么神奇?下面我们来了解了解。


卷积神经网络基本结构


与最早的神经网络不同,除了全连接之外,卷积神经网络加入了卷积层和池化层。卷积层和我们在传统计算机视觉中的卷积极为相似,而池化层主要用于减少参数的数量,防止过拟合。


54cb050da2678dac3663e41aa68be372_93c3bb5efa7a4dbeb782ed0c1f811643.jpeg


卷积层


卷积层,英文名convolution layer,卷积层是卷积神经网络的核心,每个卷积层由多个卷积核组成。当输入图像经过卷积核时,每个通道的图像会与每个卷积核进行卷积操作。



07c0f9b024369b30a31b3b08bdb9bd8.png


41917457df20200f58ea9b6b87802659_fe0f0233b35e432b9709317b618e15ae.jpeg


输入图片经过卷积层后变为多通道输出。具体操作如下图:


7e289810c41829af3d91557e9ed162c0_f6be141cfacd4f86995a7953ba61ca23.jpeg


下面这张图片可能更加清楚:


def32ddfd37a611065939c8b3e761d06_fd3e95ba76e641fd87c1b506d5717c3a.gif


一般的情况下,如果输入图像的大小为n1*n2,卷积核的大小为m1*m2,(mi<ni).卷积后,卷积核水平滑动距离为s1,竖直滑动距离为s2,则输出图像大小为k1*k2,


1684406931837.png


这里需要注意的是,当卷积核滑动到 图片末尾时,当剩余的像素数量不够一次滑动时,会自动忽略剩余的像素。由于这种卷积方式会忽略边缘的像素(边缘的像素只计算一次,而中心的像素被计算多次),所以有了第二种卷积方式,我们称之为填充(padding),很简单,在边缘之外加入像素值为0的行和列。这样,新的像素值为0的行和列变为新的边缘,而旧的边缘则变为内部的像素,从而可以被计算多次。


02a40590cd8c6bd26f73979c2c19c88d_1742f2fe52c040758882f8b8b15934af.jpeg


padding操作卷积后特征大小为:



1684406945786.png



Floor表示向下取整,p1和p2表示padding补充单列0的行和列。


最后,如果卷积核的数量为n,则输出特征图片共有n个通道。如果输入图像通道数为c,则每个卷积核的通道数为c,卷积层的参数个数为:每个卷积核大小×c×n。


池化层


池化层,英文名(pooling layer),将图片分成一个一个池子,每个池子输出一个值。池化层可以扩大或者缩小图像的大小,而且还能保证图片的像素不发生变化。常用的池化层:


1684406975790.png


假设池化层的参数为m1*m2,输入图像大小为n1*n2,则输出图像大小为 ,输入图像和输出图像的通道相同。池化层也有stride和padding操作,同卷积层的操作规则一样。


0aa9552e9def9ac1024d285111386644_49211d1162b848e0b6a2961af579df2e.jpeg


全连层


全连接层与最早的人工神经网络的线性层一样。但是,图象是二维的,我们常用的全连接层是一维的,所以我们想要将其“压扁”为一维:


1684406990288.png


全连接层的作用相当于对输入向量左乘矩阵,假设输入向量为x,全连接层对应矩阵为W,输出为'x':



075d122dfce685224ff7c50a0f9ddb13_576e5aeda8554fbf870cc58ab5289549.jpeg



Softmax激活函数


在卷积神经网络的最后一层,激活函数与之前每一层的的激活函数不同。由于最后一层要作为分类的结果,我们希望输出结果(一维向量的值)为各分类的概率,那么概率最大的那个分类就是我们得到的预测结果。例如输出为[0.2,0.3,0.4,0.1,0.1],那么我们就以第三类为预测结果。


如何使输出的结果为概率值?这里就需要用到Softmax激活函数。为了使得输出结果为概率值,首先我们需要将每一个值限制在0~1.其次是需要一个向量所有值的和为1,最后函数应该为单调递增的函数。所以我们选用归一化的指数函数作为激活函数式:


4fb08eebc8754ba53790e0383ea2768c_85df97a309a840b48cf62b424d419462.jpeg




交叉熵损失


最后,我们使用交叉熵损失作为损失函数,主要是因为这种损失使得我们一开始的训练速度很快。交叉熵的概念从熵的概念引申而来,所以计算公式非常相似。假设我们的输出直播为X=[x1,x2,x3,x4,x5,,,,xn],标签为Y=[y1,y2,y3,,,yn],则损失函数的值为:


1684407015395.png


AlexNet详解


我们现在来解析一下AlexNet的结构。首先输入图像大小为227x227x3.


第一层为卷积层,卷积核大小为11x11,共96个卷积核,由两个GPU分别训练,滑动步长为4,激活函数为ReLU,所以输出图像的特征大小为55x55x96.
第二层为池化层,核大小为3x3,每次滑动步长为2,所以图片大小为27x27x96((55-3)/2+1)
第三层为卷积层,卷积核大小为5x5,共256个卷积核,每次滑动步长为1,对图像做两个像素的填充,激活函数为ReLU,所以输出特征图为27x27x256(其中27+2x2-5+1).
第四层为池化层,核大小为3x3,每次滑动步长为2,所以输出图像大小为13x13x256((27-3)/2+1)。
第五层为卷积层,卷积核大小为3x3,共384个卷积核,每次滑动步长为1,对图像做一个像素的填充,激活函数为ReLU,所以输出特征图为13x13x384(其中13+1x2-3+1=13).
第六层为卷积层,卷积核大小为3x3,共384个卷积核,每次滑动步长为1,对图像做一个像素的填充,激活函数为ReLU,所以输出特征图为13x13x384(其中13+1x2-3+1=13).
第七层为卷积层,卷积核大小为3x3,共256个卷积核,每次滑动步长为1,对图像做一个像素的填充,激活函数为ReLU,所以输出特征图为13x13x256(其中13+1x2-3+1=13).
第四层为池化层,核大小为3x3,每次滑动步长为2,所以输出图像大小为6x6x256((13-3)/2+1=6).
之后将特征图重构为至一维:9216x1.
第九层为全连接层,输出为4096x1,激活函数为ReLU。
第十层为Dropout层,神经元激活的概率为0.5.
第十一层为全连接层,输出为4096x1,激活函数为ReLU。
第十二层为Droupout层,神经元激活的概率为0.5.
第十三层,也是最后一层为全连接层,输出为1000x1,激活函数为Softmax。
最后使用交叉熵损失进行多分类训练。


前面说了,图像最好是227x227大小,这是因为经过所有的处理,他们的除都是整数,比较方便处理,所以最好设定为227x227x3大小。


总共的参数个数就为:62367776(59.5M)。


卷积神经网络的优点


卷积神经网络现在比全连接神经网络更获得原因:


第一,减少了网络参数,例如大小为28x28x3的图像,经过3x3x32的卷积层,输出为28x28x32的特征图,卷积层的参数为3x3x3x32=864,而如果使用一个全连接层,参数数量为28x28x3x28x28x32=59006976,大了几个数量级,由于减少了网络参数,大大减少了过拟合的可能,从而增加了网络的准确率。


第二,保留了局部特征,由于卷积层比起全连接层更注重局部特征,更能对较小的物体进行识别,而图像中的物体往往占整个图像的比例不高,所以物体的局部特征更重要。


第三,卷积层具有平移不变性。就是说,相同的两个图片,无论卷积层怎么移动,他们的输出值是一样的,不会变。


好了,本节内容就到此结束了,下一节我们学习Tensorflow深度学习,拜拜了你嘞!


相关文章
|
14天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
69 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
1月前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
286 55
|
5天前
|
机器学习/深度学习 监控 算法
基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面
本项目基于YOLOv4深度学习网络,利用MATLAB 2022a实现排队人数统计的算法仿真。通过先进的计算机视觉技术,系统能自动、准确地检测和统计监控画面中的人数,适用于银行、车站等场景,优化资源分配和服务管理。核心程序包含多个回调函数,用于处理用户输入及界面交互,确保系统的高效运行。仿真结果无水印,操作步骤详见配套视频。
41 18
|
1月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
189 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
10天前
|
机器学习/深度学习 算法 计算机视觉
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于yolov4深度学习网络的公共场所人流密度检测系统matlab仿真,带GUI界面
本项目使用 MATLAB 2022a 进行 YOLOv4 算法仿真,实现公共场所人流密度检测。通过卷积神经网络提取图像特征,将图像划分为多个网格进行目标检测和识别,最终计算人流密度。核心程序包括图像和视频读取、处理和显示功能。仿真结果展示了算法的有效性和准确性。
67 31
|
1月前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如&quot;How are you&quot;、&quot;I am fine&quot;、&quot;I love you&quot;等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习中的卷积神经网络(CNN)##
在当今的人工智能领域,深度学习已成为推动技术革新的核心力量之一。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,因其在图像和视频处理方面的卓越性能而备受关注。本文旨在深入探讨CNN的基本原理、结构及其在实际应用中的表现,为读者提供一个全面了解CNN的窗口。 ##
|
1月前
|
机器学习/深度学习 传感器 数据采集
深度学习在故障检测中的应用:从理论到实践
深度学习在故障检测中的应用:从理论到实践
156 6

热门文章

最新文章