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

news/2025/2/24 10:34:23

我们将深入理解卷积神经网络的原理,以及它为什么在计算机视觉任务上如此成功。我们先来看一个简单的卷积神经网络示例,它用干对 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.niftyadmin.cn/n/5864220.html

相关文章

ubuntu22.04连接github无法访问的问题

目录 说明安装 说明 此方案只针对虚拟机, 如果是云服务器(毕竟是官方维护, github还是能访问到的)多试几次肯定能够访问到的. 国内我们无法访问外网, 所以我们目前能够访问外网的途径基本上只能开佳速器. 所以我们需要选择一款加速器来帮助我们访问外网, 目前市面上很多佳速器…

springBoot统一响应1.0版本

前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…

连接Sql Server时报错无法通过使用安全套接字层加密与 SQL Server 建立安全连接

文章目录 一. 前言二. 解决方案 方案1方案2 三. 总结 一. 前言 在《数据库原理》这门课的实验上,需要使用SQL Server,然后使用jdbc连接sql server突然报错为:SQLServerException: “Encrypt”属性设置为“true”且 “trustServerCertific…

一个基本的pyside6项目模板demo

一个属于自己的空白的pyside6项目模板demo,可以用作项目的起步框架。 主目录结构 各个目录和文件的说明: DataBase:数据库相关文件 Job:作业函数,是用来实现具体功能的函数,比如用于文字识别,或…

Rust语言基础知识详解【一】

1.在windows上安装Rust Windows 上安装 Rust 需要有 C 环境,以下为安装的两种方式: 1. x86_64-pc-windows-msvc(官方推荐) 先安装 Microsoft C Build Tools,勾选安装 C 环境即可。安装时可自行修改缓存路径与安装路…

HTML之JavaScript DOM编程获取元素的方式

HTML之JavaScript DOM编程获取元素的方式 1.获得document DOM树window.document(是window的属性)2.从document中获取要操作的元素1.直接获取var aaa document.getElementById("username") // 根据元素的id值获取页面上的唯一一个元素,有同名的则返回找到的第一个var…

deepseek_清华大学指导手册_pdf_1-5

deepseek_清华大学指导手册_pdf_1-5 无套路,无需关注,无需登录,无需app,直接下载: 下载地址 文件列表: 001_清华大学_DeepSeek从入门到精通.pdf 002_清华大学_DeepSeek如何赋能职场应用.pdf 003_清华大学…

TCP三次握手 四次挥手:一场“确认眼神”与“礼貌告别”的对话

🌟 TCP三次握手 & 四次挥手:一场“确认眼神”与“礼貌告别”的对话 🌟 一、三次握手:建立连接的“确认眼神” 场景:想象你和朋友打电话,如何确认对方能听到你说话? 过程: 1️…