手写数字识别mnist

简介: 本文介绍了使用Keras框架对MNIST手写数字识别数据集进行处理、建立神经网络模型、编译、训练、评估直至模型精度分析的完整流程。

第一步:加载keras中的mnist集

from keras.datasets import mnist
(train_images, train_labels),(test_images, test_labels) = mnist.load_data()

print(train_images.shape)#查看效果的,这两步可以忽略
print(test_images.shape)

熟悉一下matplotlib.pyplot数据显示

import matplotlib.pyplot as plt
plt.figure()#新建一个图层
plt.imshow(train_images[0],cmap=“gray”)
plt.show()

第二步:建立网络架构,

from keras import models
from keras import layers

层layer就像数据处理的筛子

本例子含有两个Dense层,最后是一个10路的激活层softmax层,返回一个由10个概率值组成的数组,表示10个数字类别中某一个的概率

network=models.Sequential()
network.add(layers.Dense(512,activation=‘relu’,input_shape=(28*28,)))
network.add(layers.Dense(10,activation=‘softmax’))

第三步:编译

optimizer 优化器,loss损失函数,metrics代码级数据监控

network.compile(optimizer=‘rmsprop’,loss=‘categorical_crossentropy’,metrics=[‘accuracy’])

第四步:准备图像数据和标签

train_images = train_images.reshape((60000, 28 * 28))#图像处理
train_images = train_images.astype(‘float32’) / 255
test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype(‘float32’) / 255

通过二维关系矩阵的方式,生成一个对应关系

from keras.utils.all_utils import to_categorical
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

第五步:拟合(FIT)模型

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

第六步:评估(EVALUATE)模型

test_loss,test_acc=network.evaluate(test_images,test_labels)

第七步:查看测试集的精度

print(‘test_acc’,test_acc)

训练精度和测试精度之间的这种差距是过拟合(overfit)造成的

相关文章
【Simulink】使用Model Explorer设置模块变量初值
【Simulink】使用Model Explorer设置模块变量初值
1019 0
|
8月前
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
265 3
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
|
10月前
|
安全 Java API
Nacos 3.0 Alpha 发布,在安全、泛用、云原生更进一步
近期,我们欣喜地宣布 Nacos 3.0 的第一个版本 Nacos 3.0-ALPHA 已经发布。Nacos 3.0 的目标是在 2.0 的基础上,进一步优化安全性、易用性和标准化。同时,我们将引入更多功能,帮助用户在分布式协调、AI 大模型、云原生等多种场景中更好地使用 Nacos,以提升其广泛适应性。
444 132
|
12月前
|
SQL 关系型数据库 MySQL
数据库导入SQL文件:全面解析与操作指南
在数据库管理中,将SQL文件导入数据库是一个常见且重要的操作。无论是迁移数据、恢复备份,还是测试和开发环境搭建,掌握如何正确导入SQL文件都至关重要。本文将详细介绍数据库导入SQL文件的全过程,包括准备工作、操作步骤以及常见问题解决方案,旨在为数据库管理员和开发者提供全面的操作指南。一、准备工作在导
1509 0
|
JavaScript 前端开发
vue实现循环发起多个异步请求——Promise.all()与Promise.race()
vue实现循环发起多个异步请求——Promise.all()与Promise.race()
556 1
|
11月前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
|
网络协议 Linux Windows
有了这个iPerf小工具,测试UDP方便多了。
有了这个iPerf小工具,测试UDP方便多了。
617 1
|
12月前
|
存储 JSON 数据格式
解密 parquet 文件,以及如何用 Python 去处理它(一)
解密 parquet 文件,以及如何用 Python 去处理它
1292 1
|
机器学习/深度学习 自然语言处理 搜索推荐
深度学习之分类网络
深度学习的分类网络(Classification Networks)是用于将输入数据分配到预定义类别的神经网络。它们广泛应用于图像分类、文本分类、语音识别等任务。以下是对深度学习分类网络的详细介绍,包括其基本概念、主要架构、常见模型、应用场景、优缺点及未来发展方向。
948 4
|
存储 算法 编译器
C++性能调优:从代码层面提升程序效率
本文探讨了C++程序性能调优的关键点:选择合适的数据结构和算法,例如用哈希表(如`std::unordered_map`)替换低效的数组或链表;减少不必要的内存分配和释放,利用智能指针和容器如`std::vector`自动管理内存;优化循环和条件语句,例如在循环外存储数组大小;利用编译器优化如`-O2`或`-O3`;以及使用性能分析工具如`gprof`、`callgrind`和`perf`识别并解决性能瓶颈。通过这些方法,可以有效提升C++程序的运行效率。