用了Keras来构建一个卷积神经网络对MNIST数据集进行分类

首先导入所需库和模块,然后加载MNIST手写数字数据集并对数据进行预处理。接着定义了一个基于卷积神经网络(CNN)的模型,该模型包含多个卷积层、最大池化层以及Dropout层作为正则化手段。模型最后接一个全连接层作为输出层,使用softmax激活函数处理多分类任务。

模型编译阶段设置了损失函数为“categorical_crossentropy”,优化器为Adam,评估指标为准确率。之后使用训练数据对模型进行训练,并在测试集上评估模型的性能,最终输出测试集上的准确率。

from __future__ import absolute_import  # 绝对导入,确保导入的模块是绝对路径下的
from __future__ import division         # 导入除法运算的未来版本特性
from __future__ import print_function   # 导入打印函数的未来版本特性import numpy as np
from keras.models import Sequential
from keras.optimizers import RMSprop
from keras.layers import Activation, Dense, Dropout
from keras.layers import Conv2D, MaxPooling2D, Flatten
from keras.utils import to_categorical, plot_model
from tensorflow.keras.datasets import mnist# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()# 计算标签的数量
num_labels = len(np.unique(y_train))# 将标签转换为 one-hot 向量
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)# 图像输入尺寸
image_size = x_train.shape[1]
# 调整尺寸并进行归一化
x_train = np.reshape(x_train, [-1, image_size, image_size, 1])
x_test = np.reshape(x_test, [-1, image_size, image_size, 1])
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255# 网络参数
# 图像按原样处理(方形灰度图)
input_shape = (image_size, image_size, 1)
batch_size = 128
kernel_size = 3
pool_size = 2
filters = 64
dropout = 0.2# 模型是CNN-ReLU-MaxPooling的堆叠
model = Sequential()
model.add(Conv2D(filters=filters,kernel_size=kernel_size,activation='relu',input_shape=input_shape))
model.add(MaxPooling2D(pool_size))
model.add(Conv2D(filters=filters,kernel_size=kernel_size,activation='relu'))
model.add(MaxPooling2D(pool_size))
model.add(Conv2D(filters=filters,kernel_size=kernel_size,activation='relu'))
model.add(Flatten())
# 添加 dropout 作为正则化器
model.add(Dropout(dropout))
# 输出层是10维的 one-hot 向量
model.add(Dense(num_labels))
model.add(Activation('softmax'))
model.summary()# 如果可以安装 pydot,则启用此功能
# pip install pydot
#plot_model(model, to_file='cnn-mnist.png', show_shapes=True)# 用于 one-hot 向量的损失函数
# 使用 Adam 优化器
# 精度是分类任务的好指标
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
# 训练网络
model.fit(x_train, y_train, epochs=10, batch_size=batch_size)_, acc = model.evaluate(x_test,y_test,batch_size=batch_size,verbose=0)
print("\nTest accuracy: %.1f%%" % (100.0 * acc))

这段代码的主要步骤包括:

  1. 导入所需的模块。
  2. 加载MNIST数据集并进行预处理,包括将标签转换为 one-hot 向量,并将图像像素值归一化到 [0, 1] 区间。
  3. 定义了网络的参数,包括输入图像的尺寸、批处理大小、卷积核大小、池化大小等。
  4. 构建了一个简单的卷积神经网络模型,包括卷积层、ReLU激活函数、池化层、Dropout正则化层以及输出层。
  5. 编译模型,指定损失函数、优化器和评估指标。
  6. 使用训练集训练模型。
  7. 使用测试集评估模型性能,并打印出测试准确率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云南旅游攻略

丽江景点 Day1 ——丽江古城 丽江古城是一个充满文化和历史的地方,拥有丰富的景点和活动。 推荐游玩: 参观标志性建筑:大水车是丽江古城的标志性建筑,可以在这里拍照留念。 探索中心广场:四方街是古城的中心&#xf…

【第6节】Lagent AgentLego 智能体应用搭建

目录 1 基础课程2 安装环境2.1 教程要求2.2 安装 Lagent 和 AgentLego 3 实践操作3.1 Lagent:轻量级智能体框架3.1.1 Lagent Web Demo 使用3.1.2 用 Lagent 自定义工具 3.2 AgentLego:组装智能体“乐高”3.2.1 AgentLego 直接使用部分3.2.2 AgentLego We…

C++笔记:类和对象(一)->封装

类和对象 认识类和对象 先来回忆一下C语言中的类型和变量,类型就像是定义了数据的规则,而变量则是根据这些规则来实际存储数据的容器。类是我们自己定义的一种数据类型,而对象则是这种数据类型的一个具体实例。类就可以理解为类型&#xff0c…

从图灵奖看计算中的随机性与伪随机性

从图灵奖看计算中的随机性与伪随机性 目录 从图灵奖看计算中的随机性与伪随机性 一、引言 二、随机性的本质与应用 三、图灵奖得主对随机性的研究 四、伪随机性的应用 五、案例研究:伪随机数生成器的发展 六、最佳实践 一、引言 在计算机科学的广阔天地中&…

Android Native Hook: 原理、方案对比与具体实现

文章目录 一、原理二、方案对比三、具体实现3.1 Inline Hook3.2 PLT/GOT Hook 四、实践案例:在Android应用中Hook open 函数4.1 Inline Hook实现4.2 PLT/GOT Hook实现 五、实践技巧和优化建议六、总结 在Android开发中,Hook技术是一种常用的技巧&#xf…

二维码存储图片如何实现?相册二维码的制作技巧

如何将照片生成二维码后存储展示?现在很多人会将图片生成二维码以后,用于分享或者储存的用途,减少个人内存的占用量,而且分享照片也会更加的方便,只需要扫描二维码就可以让其他人查看图片。 想要制作图片二维码的步骤…

(ChatGPT、Al柯基、Al Web、ChatGPT4.0中文网、VIVI-Al)分享好用的ChatGPT

目录 1、ChatGPT 2、AI柯基 - 智能写作助手 - 沈阳满信电子商务有限公司 3、AI Web

CLHLS交叉滞后模型和广义估计方程一起用发文2区 | 公共数据库周报(4.10)

零基础CHARLS发论文,不容错过! 长期回放更新指导!适合零基础,毕业论文,赠送2011-2020年CHARLS清洗后的数据全套代码 CHARLS公共数据库 CHARLS数据库简介中国健康与养老追踪调查(China Health and Retirement Longitudi…

C. Inhabitant of the Deep Sea

本题链接:Problem - C - Codeforces 题目: 样例: 输入 6 4 5 1 2 4 3 4 6 1 2 4 3 5 20 2 7 1 8 2 2 2 3 2 2 15 1 5 2 7 5 2输出 2 3 5 0 2 2 思路: 数学模拟。 根据题意,一前一后的攻击,攻击k次后&…

Linux: signal: 怎么知道是谁kill了当前进程

这个就需要使用strace查看,因为strace可以看到如下的信息: [root@abc tmp]# grep SIGTERM a.out.out 583239 --- SIGTERM {si_signo=SIGTERM, si_code=SI_USER, si_pid=583288, si_uid=0} ---

Mysql联合索引和最左匹配例子说明

文章目录 前言联合索引最左匹配原则举例说明 前言 是什么是索引? 索引是一种数据结构,用于加速数据库查询。 当没有索引时,数据库系统需要执行全表逐行扫描来满足查询需求。这意味着它会逐行读取整个表中的数据,并在内存中进行比…

设计模式-状态模式在Java中的使用示例-信用卡业务系统

场景 在软件系统中,有些对象也像水一样具有多种状态,这些状态在某些情况下能够相互转换,而且对象在不同的状态下也将具有不同的行为。 为了更好地对这些具有多种状态的对象进行设计,我们可以使用一种被称之为状态模式的设计模式…

【提示学习论文】BlackVIP: Black-Box Visual Prompting for Robust Transfer Learning论文原理

BlackVIP: Black-Box Visual Prompting for Robust Transfer Learning BlackVIP:稳健迁移学习的黑盒视觉提示 问题 黑盒白盒? 黑盒和白盒的概念与对预训练模型内部参数的了解程度相关。黑盒指的是对预训练模型的参数和结构缺乏详细了解,通常只能通过使…

OpenCV 如何实现边缘检测器

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV如何实现拉普拉斯算子的离散模拟 下一篇 :OpenCV系列文章目录(持续更新中......) 目标 在本教程中,您将学习如何: 使用 OpenCV 函数…

测试用例设计方法-异常测试

飞的最高的海鸥,能看到最远的奇景。大家好,继续给大家分享如何进行异常测试,首先要做好异常测试,需要我们对被测系统进行全面的了解,熟悉被测系统的功能、架构和运行机制,然后在这个基础上尽可能覆盖各种的…

MATLAB命令

MATLAB是一个用于数值计算和数据可视化的交互式程序。您可以通过在命令窗口的MATLAB提示符 ‘>>’ 处键入命令来输入命令。 在本节中,我们将提供常用的通用MATLAB命令列表。 用于管理会话的命令 MATLAB提供了用于管理会话的各种命令。下表提供了所有此类命令…

递归神经网络(RNN)在AI去衣技术中的深度应用

在人工智能(AI)技术飞速发展的今天,图像处理和计算机视觉领域不断取得新的突破。其中,AI去衣技术作为一个具有挑战性的研究方向,引起了广大研究者和公众的关注。递归神经网络(RNN)作为深度学习的…

《Python源码剖析》之PyTypeObject

前言 这一篇博客原本应该是写在上一篇关于pyObject对象的博客中的,但是为了不把内容写的又臭又长,给读者减轻痛苦,给我也减少压力,于是就专门用一篇介绍一下今天的主角—pyTypeObject。 开始 还记得在上一篇我们有聊到&#xf…

具身智能的 Scaling Law

Scaling Law 具身智能的Scaling Law指的是一种理论,它探讨了具备智能的生物或机器系统随着规模的扩展而表现出的一些规律性变化。这个理论涵盖了许多方面,主要关注智能系统的不同尺度之间的相互关系。 具身智能是指生物或机器系统在其环境中感知、行动…

vscode 使用文件模板功能来添加版权信息

vscode 新建文件的时候,自动填充作者及版权信息 无需使用插件,操作如下: 选择 “首选项(Preferences)”。在搜索框中输入 “file template” 或者 “文件模板”,然后选择相关的设置项。 {"C_Cpp.clang_format_fallbackSt…