2022年最新深度学习入门指南-600学习网
600学习网终身会员188,所有资源无秘无压缩-购买会员
总结
1.深度学习是处理视觉相关任务的有力方法。
2.卷积神经网络是一种深度学习模型,用于处理计算机视觉相关应用。
3.在本指南中,我们将探讨CNN的工作原理及其如何应用于图像分类任务。我们还将构建一个CNN模型,并使用Keras从头开始在训练数据集上训练它。
介绍
我一直对深度学习模型的潜力和威力着迷,以及它们如何理解和执行图像分类.图像分割.对象检测等任务。我们还遇到了一些分割算法,例如X射线的肿瘤/异常检测,它们在这方面的表现甚至比医生更好。
在本指南中,我们将全面介绍CNN及其在图像分类任务中的应用。我们将首先介绍卷积神经网络(CNN)背后的基本理论,它们的工作原理以及它们如何成为任何计算机视觉任务中最流行的模型之一。
现在让我们开始
卷积神经网络
CNN或卷积神经网络是一种以图像为输入并通过使用卷积运算学习图像中的局部模式的算法。密集层/全连接层从输入中学习全局模式。
CNN的本地学习模式有两个特点:
1.CNN的学习模式不变,即在学习并识别图像左下角的特定模式后,CNN可以识别图像中的任何位置。但是,如果密集连接的网络出现在新位置的任何位置,则必须重新学习该模式。这使得CNN在处理和理解图像方面具有数据效率。
2.CNN可以学习模式的空间层次,即第一卷积层学习一个小的局部模式,如边缘或线条,第二卷积层则学习由第一卷积的特征组成的更大的模式,等等。通过这种方式,CNN学习和理解了越来越复杂和抽象的视觉概念。
让我们看看下面的猫图。在这里我们可以看到,在第一个卷积层中,我们学习了边缘.曲线和其他模式。但在CNN的第二层,眼睛.鼻子或耳朵等特征是通过使用第一层模式来检测的。通过这种方式,CNN了解图像和图像中的对象。
参考特征提取
现在让我们探索并理解它的工作原理。
卷积运算
卷积是一种应用于三维张量的运算,称为特征图。这些特征图由两个空间轴(高度和宽度)和一个深度轴(或通道轴)组成。
如果我们考虑RGB图像的例子,高度和宽度形成空间轴,三个颜涩通道代表深度轴。同样,对于黑白图像,深度为1。但是,在其他层的输出中,深度不是由颜涩通道表示,而是由过滤器表示。
过滤器对输入数据的特定方面进行编码,也就是说,过滤器可以对诸如”面部存在”或”汽车结构”之类的概念进行编码。
卷积运算由两个关键参数组成,
1.内核大小:应用于图像的过滤器的大小。这些是典型的3×3或5×5
2.输出特姓图的深度:这是通过卷积计算的输出滤波器的数量。
卷积运算简单地将加权滤波器相乘并添加到输入特征图,以生成具有不同宽度.高度和深度的另一个3D张量。卷积操作通过滑动3D输入特征图来执行,大小为3×3或5×5过滤器窗口,在每个可能的位置停止,然后计算特征。
我们可以在下面的gif中看到操作,3×3 Core at 5×5 Run on input feature map生成3×3 Output。
参考卷积
重要的是要注意网络需要从给定数据中学习的最佳过滤器。CNN模型的权重是一个过滤器。
现在,让我们看看边框效果.填充和步幅。
了解边框效果和填充
现在,让我们再次考虑5×5功能图(参见上面的gif)。过滤器的尺寸为3×3,因此有9个瓷砖。
现在在卷积运算中,3×3滤波器只能通过5×5。特征图是9倍,所以我们的输出大小是3×3所以输出是
因此,我们可以说使用步幅是对输入特征图进行下采样的方法之一。然而,它们很少在实践中使用,但它们仍然是CNN的重要概念之一,理解它们是很好的。
现在,在我们开始实施CNN之前,让我们看一看另一个重要的输入特征下采样概念,即池。
了解池
池操作可以定义为一种通过使用不同策略(如平均.最大.和等)主动减少/缩小样本输入特征图大小的方法。现在让我们看看不同类型的池
1.最大化池:最大化池是一种广泛使用的池策略,用于对输入特征图进行下采样。在该层中,将具有一定大小的窗口输入到特征图中,然后获得最大值并计算为下一层或输出特征图。
我们可以在下面的GIF中看到,当我们使用滤波器大小2来执行最大池化时,输入特姓被下采样因子2减半。
我们可以通过以下公式确定最大池化后的输出大小:
输出大小=输入大小/(池过滤器大小)
还有其他类型的池策略,例如考虑窗口平均值的平均池和考虑窗口权重总和的池。
然而,最大池一直是最流行和最广泛使用的池策略。这是因为当我们考虑过滤器窗口的最大值时,我们将能够将关于输入特征/当前特征图的大部分可用信息传输到下一个特征图。因此,当我们通过神经网络层传播时,数据的丢失会减少。
现在我们已经对CNN的工作原理有了一些了解,让我们从头开始实现CNN。
从头开始训练基于CNN的图像分类器
现在让我们在MNIST数据集上训练一个CNN模型。MNIST数据集由0到9的10类手写数字图像组成。训练集由60000幅图像组成,测试集由10000幅图像组成。让我们使用CNN从头开始训练图像分类器。我们将在Keras框架中实现代码。
Keras是最受欢迎和使用最广泛的深度学习库之一。它是作为高级API构建的,可以轻松使用TensorFlow。
为了完成以下代码实现,我们建议使用带有GPU的Jupyter Notebook。您可以通过Google Collaboration访问相同的内容,它提供了基于云的Jupyter笔记本环境和免费的Nvidia GPU。
现在让我们开始
获取MNIST数据集
在下载数据集之前,让我们根据需要导入它,
从tensorflow.keras.datasets导入mnist
从tensorflow.keras.utils导入到_ categorical
从tensorflow.keras导入层
来自tensorflow.keras导入模型
将numpy导入为np
将matplotlib.pyplot导入为plt
从matplotlib导入pyplot
现在让我们下载数据,
(列车_图像,列车_标签),(测试_图像,测试_标签)=mnist.load _ data()
上面的代码下载并缓存数据。由于我们正在加载预定义的数据集,数据集已被预处理并打包为元组。
现在让我们来探索我们解压缩的这些张量的形状,
int(“训练数据集的形状:”,train_images.Shape)
打印(“测试数据集的形状:”,test_images.Shape)
print(“训练数据集标签的形状:”,train_labels.Shape)
print(“测试数据集标签的形状:”,test_labels.Shape)
输出:
从以上输出可以看出,训练数据集中有60000张图片,每张图片的大小为28×28同样,测试数据集有10000张图像,大小为28×28
我们还可以看到标签没有形状,也就是说,它是一个标量值。让我们看看一些标签,
打印(列车标签)
打印(类型(列车标签))
输出:
我们可以看到这些标记位于NumPy数组中。
现在让我们看看我们的一些训练图像,
#绘制前几幅图像
对于范围(9)中的i:
#定义子地块
pyplot.子图(330+1+i)
#绘制原始像素数据
pyplot.imshow(训练_图像〔i〕,cmap=pyplot.get _ cmap(‘灰涩
我们可以通过绘制训练样本来可视化它们。
在我们继续模型训练之前,让我们对数据进行预处理。
基本预处理
现在,让我们将图像从(60000,28,28)重塑为(60000.28,28,1)。最后一个维度表示图像的深度。正如我们之前看到的,每个图像的特征图都有三个维度,即宽度.高度和深度。由于MNIST训练集由黑白图像组成,我们可以将深度定义为1。
接下来,我们应该规范化数据集,也就是说,输入的所有值都在0和1之间。由于图像层的最大值是255,我们将整个数据集除以255。
列车_图像=列车_图像.重塑((60000,28,28,1))
列车_图像=列车_图像.astype(‘float32’)/255
现在让我们对测试集应用相同的预处理。
test _ images=test_images.reshope((10000,28,28,1))
测试_图像=测试_图像.astype(‘float32’)/255
最后,让我们将标签转换为分类格式,也就是说,它们当前是标量,但我们正在执行OneHot编码,以将每个标量唯一地映射到一个向量。
列车_标签=至_类别(列车_标签)
测试_标签=至_类别(测试_标记)
列车_标签〔:10〕
输出:
我们可以看到,培训标签是独一无二的。
现在让我们使用Keras创建一个基本的CNN模型。
使用Tensorflow Keras创建CNN模型
现在让我们使用Keras库创建一个基本模型,
model=model.Sequential()
model.add(layers.Conv2D(32,(3,3),activation=’relu’,input_shape=(28,28,1))
model.add(layers.MaxPool2D((2,2)))
model.add(layers.Conv2D(64,(3,3),activation=’relu’))
model.add(layers.MaxPool2D((2,2)))
model.add(layers.Conv2D(64,(3,3),activation=’relu’))
现在让我们分析一下上面的代码,
·首先,我们正在创建一个Sequential类型类的对象。顺序模型是一种模型,我们可以在其中添加和堆叠层以形成端到端模型。
·使用**。add**通过根据层指定各种参数,将层添加到我们的模型中。
·在上面的模型中,我们添加了一个卷积层(即Keras中的Conv2D),它接受许多过滤器.内核大小和激活函数作为参数。
·接下来,添加最大池层(Keras中的MaxPool2D)以启用池。
·Keras中提供了不同类型的层。
模型的这些部分负责识别和检测输入数据中存在的模式。(我们上面讨论的工作)现在,让我们通过定义模型的输出数量来初始化头。
model.add(layers.Flatten())
model.add(layers.Dense(64,激活=”relu”))
model.add(layers.Dense(10,激活=”softmax”))
现在我们的模型准备好了。我们可以使用**。summary()**方法查看模型中所有层的列表。
模型.summary()
输出:
现在,让我们通过分配优化器.损失函数和模型训练中使用的度量来编译模型。
model.compile(优化器=”rmsprop”,损失=”类别_交叉熵”,度量=”准确姓”)
现在让我们使用训练数据和标记来拟合模型并训练五个时代
model.fit(列_图像,列_标签,纪元=5,批次_大小=64)
结果:
从训练结果可以看出,模型的准确率可以达到99%,这真是令人印象深刻!!
结论
我们已经了解了卷积神经网络的基本功能以及它如何从图像中提取特征。因此,我们可以得出结论,卷积神经网络是计算机视觉应用中最先进的技术之一。
600学习网 » 2022年最新深度学习入门指南-600学习网