当前位置: 首页 > article >正文

深度学习(5)-卷积神经网络

我们将深入理解卷积神经网络的原理,以及它为什么在计算机视觉任务上如此成功。我们先来看一个简单的卷积神经网络示例,它用干对 MNIST数字进行分类。这个任务在第2章用密集连接网络做过,当时的测试精度约为 97.8%。虽然这个卷积神经网络很简单,但其精度会超过第2章的密集连接模型。

代码 8-1给出了一个简单的卷积神经网络。它是 conv2D层和 MaxPooling2D 层的堆叠,你很快就会知道这些层的作用。我们将使用第7章介绍过的函数式 API来构建模型。

代码8-1 实例化一个小型卷积神经网络

from tensorflow import keras

from tensorflow.keras import layers

inputs = keras.Input(shape=(28, 28, 1))

x = layers.Conv2D(filters=32, kernel_size=3, activation="relu")(inputs)

x = layers.MaxPooling2D(pool_size=2)(x)

x = layers.Conv2D(filters=64, kernel_size=3, activation="relu")(x)

x = layers.MaxPooling2D(pool_size=2)(x)

x = layers.Conv2D(filters=128, kernel_size=3, activation="relu")(x)

x = layers.Flatten()(x)

outputs = layers.Dense(10, activation="softmax")(x)

model = keras.Model(inputs=inputs, outputs=outputs)

卷积神经网络接收的输入张量的形状为(image height,image width,image channels)(不包括批量维度)。本例中,我们设置卷积神经网络处理大小为(28,28,1)的输入,这正是 MNIST 图像的格式。

我们来看一下这个卷积神经网络的架构,如代码 8-2所示。

代码 8-2 显示模型的概述信息

model.summary()

在这里插入图片描述

可以看到,每个 conv2D层和 MaxPooling2D层的输出都是一个形状为(height,width,channels)的3阶张量。(张量的阶数相同,形状不同)宽度和高度这两个维度的尺寸通常会随着模型加深而减小。通道数对应传入Conv2D层的第一个参数(32、64或 128)。在最后一个 conv2D层之后,我们得到了形状为(3,3,128)的输出,即通道数为 128的3x3特征图。下一步是将这个输出传入密集连接分类器中,即 Dense 层的堆叠,你已经很熟悉了。这些分类器可以处理1阶的向量,而当前输出是3阶张量。为了让二者匹配,我们先用 Flatten 层将三维输出展平为一维,然后再添加 Dense 层。最后,我们进行十类别分类,所以最后一层使用带有 10个输出的 softmax 激活函数。下面我们在 MNIST数字上训练这个卷积神经网络。我们将重复使用的MNIST 示例中的很多代码。

由于我们要做的是带有 softmax 输出的十类别分类,因此要使用分类交叉熵损失,而且由于标签是整数,因此要使用稀疏分类交叉熵损失sparse categorical crossentropy,如代码 8-3 所示。注意此处代码执行需要网络才能执行。

from tensorflow.keras.datasets import mnist

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

train_images = train_images.reshape((60000, 28, 28, 1))

train_images = train_images.astype("float32") / 255

test_images = test_images.reshape((10000, 28, 28, 1))

test_images = test_images.astype("float32") / 255

model.compile(optimizer="rmsprop",

              loss="sparse_categorical_crossentropy",

              metrics=["accuracy"])

model.fit(train_images, train_labels, epochs=5, batch_size=64)

我们在测试数据上评估模型,如代码 8-4所示。

代码 8-4 评估卷积神经网络

密集连接模型的测试精度约为 97.8%,而这个简单的卷积神经网络的测试精度达到99.1%,错误率降低了约 60%(相对比例)。这相当不错!

但是,与密集连接模型相比,这个简单卷积神经网络的效果为什么这么好?要回答这个问题,我们来深入了解 Conv2D 层和 MaxPooling2D层的作用。

总结:在一定条件下,卷积神经网络在图像识别上精度优于密集链接模型。每个 conv2D层和 MaxPooling2D层的输出都是一个形状为(height,width,channels)的3阶张量。宽度和高度这两个维度的尺寸通常会随着模型加深而减小。而通道数会模型加深而增加。我的理解就是通过悬系,模型对于特征的理解越来越丰富。


http://www.kler.cn/a/559024.html

相关文章:

  • LangChain-基础(prompts、序列化、流式输出、自定义输出)
  • conda环境中运行“python --version“所得的版本与环境中的python版本不一致----deepseek并非全能
  • 怎么在Github上readme文件里面怎么插入图片?
  • rtconfig.cpython-313.pyc 在 .gitignore文件中写入 *.pyc 文件仍然没有被忽略?
  • Grok 3与GPT-4.5的“智能天花板”争夺战——谁才是大模型时代的算力之王?
  • Python常见面试题的详解16
  • Chrome 推出全新的 DOM API,彻底革新 DOM 操作!
  • 250223-Linux/MacOS如何跳过Miniconda的条款阅读,直接安装Miniconda
  • Docker部署 MongoDB及常用命令
  • java八股文之数据库
  • 超高清大图渲染性能优化实战:从页面卡死到流畅加载
  • 短剧源码搭建部署海外短剧系统
  • sql的索引与性能优化相关
  • 【新手初学】SQL注入之二次注入、中转注入、伪静态注入
  • 【愚公系列】《鸿蒙原生应用开发从零基础到多实战》002-TypeScript 类型系统详解
  • 2025年AI科技热点全景:人形机器人量产、垂类应用崛起与推理模型革新引领未来
  • ubuntu环境中安装latex并使用vscode
  • 区块链共识机制详解
  • [250222] Kimi Latest 模型发布:尝鲜最新特性与追求稳定性的平衡 | SQLPage v0.33 发布
  • CSS中的`position`属性的几种定位方式