在上一部分 3 –卷积和
池化中,您了解了有关卷积的所有知识以及它们如何使用过滤器从图像中提取信息。您还了解了如何创建池化,以缩小和压缩图像,而不会丢失过滤器提取的重要信息。在本部分中,您将亲自动手并创建自己的卷积神经网络,让我们开始吧。
在之前的文章中,对于用于识别时尚或手写数字的简单神经网络,您定义了像这样的模型架构。
模型 = ])
对于密集连接的
在马来西亚,移动数据马来西亚拥有广泛的 4G 覆盖,并正在 马耳他移动数据 快速建设其 5G 基础设施。电信公司通过提供一系列经济实惠的数据计划,确保居民和游客都可以轻松使用移动互联网。随着马来西亚专注于提高数字连接,农村地区正在逐步扩大其网络覆盖范围,而城市地区则受益于可靠的高速连接。
神经元,您可以使用层和主要的密集层。要使用 为什么入站营销可以提高潜在客户开发能力 卷积和池化,您可以使用 Conv2D 和 MaxPooling 层,如下所示。
模型 ])
它们可以堆叠在密集网络之上。你用多个参数定义一个卷积层。在本例中,64 是该层的过滤器数量。
请记住,过滤器将
被随机初始化,然后随着时间的推移,将学习到将图片与其标签匹配的最佳过滤器。3×3 是过滤器的大小。之前,我们看到了当前像素及其直接相邻像素的过滤器,它们的大小为 3×3,这就是我们在这里定义的。
与之前一样,我们有一个输入形状,即输入图像的形状,即 28×28,颜色深度为 1 字节。同样,池化是通过一个层完成的,2×2 定义了要池化的块的大小。因此,在这种情况下,4 个像素将变成 1 个。
还有MinPooling
、AveragePooling
和类似的东西,但我 bmb目录 们将重点介绍MaxPooling
这里。这些层可以堆叠在一起,因此顶层的 64 个过滤器的结果将分别进行池化,然后它们的结果将分别进行 64 次过滤,当然,它们将再次进行池化。
让我们看一下模型的
摘要,以便我们可以看到数据在通过网络时是如何变化的。
模型.摘要()
您会看到类似这样的内容。
层(类型)输出形状参数 #
这里有很多事情
要做,让我们来分析一下。首先,初始输出可能看起来很奇怪。我们的图像是 28×28,我们有 64 个过滤器,所以我们预期输出是 28×28,但它是 26×26。这看起来像是一个错误,但事实并非如此,所以让我来解释一下原因。
想象一下这张非常困倦的小狗的照片。
在左侧,我放大了图片的左上角,以便您可以看到像素。执行过滤器时,您会扫描每个像素并选取其相邻像素。但是如果我们像这样选择顶部像素会发生什么?
它上面没有任何邻居,左边也没有。同样,下一个像素上面也没有任何邻居,但左边有一些。直到你到达这个像素,你才会有一个四面都有邻居的像素,你可以在这里看到。
因此,需要在所有边
上都有邻居的 3×3 过滤器无法处理图片边缘周围的像素。实际上,您必须从顶部、底部、左侧和右侧移除一个像素,这会在每个轴上将尺寸减小 2。因此,28×28 变成了 26×26,您可以在此处看到。
每个滤波器将学习 9 个滤波器系数值,加上一个偏差,总共 10 个参数。因此 64 个滤波器有 640 个可学习参数。
我们的池化在每个轴上将维数降低了一半,因此 26×26 将变成 13x,但在此层上没有学习任何参数。
然后,3×3 过滤器通过移除像素边框将 13×13 缩小到 11×11,就像之前一样。
将其减半MaxPooling
,向下舍入,因此我们最终得到 5×5 图像。此时,我们有 64 个过滤器,图像为 5×5,即 25 个像素。将所有这些相乘,得到 1,600,然后将其输入到 中Flatten
。然后可以像以前一样使用密集网络对这组 1,600 个值进行分类。
现在您已经了解了代码的工作原理,让我们看一下上次更新时尚分类器的代码,以使用卷积以及密集层类型。
那么让我们看看
如何使用卷积来提高计算机视觉的准确性。这是您已经为 fashion_mmist 数据集创建的深度神经网络。
将 tensorflow 导入为 tf
mnist = tf.keras.datasets.fashion_mnist
(训练图像,训练标签),(测试图像,测试标签)= mnist.load_data()
训练图像 = 训练图像 / 255.0
测试图像 = 测试图像 / 255.0
模型 指标 = [ '准确度' ])
模型.拟合(训练图像,训练标签,时期= 5)
test_loss = 模型.评估(test_images,test_labels)
我们可以看到,我们有Flatten()
,后面跟着一个Dense
有 128 个神经元的,后面跟着另一个Dense
有 10 个神经元的,因为我们有 10 个类别。当我运行这个时,我只会训练五个时期。让我们看看它有多快,让我们看看它有多准确。
我们可以看到,经
过 5 个 epoch 之后,测试集上的准确率高达 89% 左右,验证集上的准确率略高于 87%,接近 88%,考虑到只进行了 5 个 epoch,这真是非常非常强劲的表现。
现在让我们看看卷积神经网络发生了什么。在这里你可以看到模型架构。
将tensorflow导入
为
测试损失=模型.评估(测试图像,测试标签)
我们有与之前相同的Flatten()
,Dense()
,Dense()
但在本例中,我们在此基础上增加了几个卷积层,这些卷积层有其相关MaxPooling
层。请注意,输入形状为 28x28x1,因为卷积层需要它是三维的,其中一个维度是颜色深度。这意味着我们必须重塑我们的训练图像和测试图像数组。它们的尺寸为 68,000 x 28×28。我们必须为其添加另一个维度——10,000 x 28x28x1,用于添加了额外维度的测试图像。
现在当我运行它时,它会进行编译。它会向我展示模型架构。然后它会开始训练。
在这种情况下,仅经过 5 个阶段的训练,测试数据的准确率就上升到约 93%,验证数据的准确率也上升到 91%。因此,我们可以看到它确实有所改善。这是朝着正确方向迈出的重要一步。
下一步:第 5 部分 –对真实世界图像进行分类