机器学习-识别手写数字

news2025/1/10 21:51:39

机器学习可以首先构建一个神经网络,用于识别手写数字。通过训练数据,优化神经网络的参数。再利用测试数据来测试训练完成后的神经网络的准确度。本次需要下载的库有tensorflow和matplotlib,keras和mnist数据集一般都被集成在tensorflow中了。

MNIST手写数字数据

首先查看一下MNIST手写数字的数据是什么样子的。

from tensorflow.keras.datasets import mnist

# 读取MNIST数据
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

# 查看训练数据
train_images.shape()

# 查看训练数据的标签
len(train_labels)
train_labels
# 训练数据
(60000, 28, 28)

# 训练标签
60000
array([5, 0, 4, ..., 5, 6, 8], dtype=uint8)

从上面可以看出,MNIST手写数字的数据,是28*28的灰度图片,并且在训练数据中,有一共60000张这样的手写数字图片。在训练标签中,一共有60000个对应的数字,作为训练数据的标签。

可以利用matplot去查看这些28*28的图片是什么样子。

import matplotlib.pyplot as plt

plt.imshow(train_images[0], cmap='binary')
plt.show

在这里插入图片描述

可以清晰的看到,这个手写数字图片由28*28个像素组成,并且每个像素深度在0-255之间,组成的像素表达了一个人眼可以分辨的数字5。然而机器无法直接读取出这个数字,而是通过读取每个像素的数据,根据训练好的模型才能给出结果。

构建神经网络

model = keras.Sequential([
    layers.Flatten(input_shape=(28, 28)),  # Flatten the input image to a vector of size 784
    layers.Dense(512, activation="relu"),
    layers.Dense(10, activation="softmax")
])

model.compile(optimizer="rmsprop",
              loss="sparse_categorical_crossentropy",
              metrics=["accuracy"])

在这里可以看出,这个神经网络的结构比较简单,一共有三层。输入层,将28*28的矩阵展平为一维向量,并输入给第二层计算。第二层是一个激活函数为ReLU函数并含有512个节点的隐藏层。第三层输出层,激活函数为softmax用于多分类问题。而10个节点,也就代表了从零到九的十个数字。可以看出这个神经网络就是为了解决一个十种可能的多分类问题。

训练神经网络

在利用刚刚读取的MNIST手写数字数据集,对刚刚构建的神经网络进行训练

# 将数据缩小到0-1,有利于神经网络的快速计算和训练
train_images = train_images.astype("float32") / 255
test_images = test_images.astype("float32") / 255

model.fit(train_images, train_labels, epochs=5, batch_size=128)
Epoch 1/5
469/469 ━━━━━━━━━━━━━━━━━━━━ 2s 2ms/step - accuracy: 0.8727 - loss: 0.4416
Epoch 2/5
469/469 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9664 - loss: 0.1143
Epoch 3/5
469/469 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9795 - loss: 0.0703
Epoch 4/5
469/469 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9841 - loss: 0.0521
Epoch 5/5
469/469 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9892 - loss: 0.0369

可以看出随着五次的训练,准确率升高非常迅速,损失值也在减小。

预测结果

五个批次全部训练完成后,可以根据测试数据,来对神经网络的准确性进行判断。

predictions = model.predict(test_images)

# 查看第一个测试数据的图像
plt.imshow(test_images[0], cmap='binary')
plt.show()

# 查看模型的预测结果
print(predictions[0])

# 查看模型预测结果,最可能的值
print(predictions[0].argmax())

# 查看正确的标签
print(test_labels[0])

在这里插入图片描述

313/313 ━━━━━━━━━━━━━━━━━━━━ 0s 1ms/step  
[2.4641224e-08 1.5685966e-08 4.7843769e-06 6.2090970e-05 5.8346529e-11
 9.6760395e-08 7.8394131e-11 9.9992907e-01 3.8257639e-08 3.8722346e-06]
7
7

在这里首先输出了模型的预测结果,是从0到9的可能性。模型的最后预测结果是7最大,所以输出了7,与正确的标签一致。

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

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

相关文章

C/C++语言基础--指针三大专题详解3,完结篇(包括指针做函数参数,函数指针,回调函数,左右法则分析复杂指针等)

本专栏目的 更新C/C的基础语法,包括C的一些新特性 前言 指针是C/C的灵魂,和内存地址相关联,运行的时候速度快,但是同时也有很多细节和规范要注意的,毕竟内存泄漏是很恐怖的指针打算分三篇文章进行讲解,本…

LabVIEW多显示器环境下主显示器识别与管理

该程序使用 LabVIEW 图形化编程语言,涉及多显示器环境中主显示器的识别与信息提取。图像显示了两个不同的方法来获取主显示器的信息。 第一部分:方法一——基于显示器位置的主显示器识别 1. 当前监视器识别: 使用“FP.Monitor”属性节点获取…

在AES加密中,设主密钥为“2B 7E 15 16 28 AE D2 A6 AB F7 15 88 09 CF 4F 3C”,试计算迭代第1轮使用的轮密钥。

题解: 1.分析: 第一轮使用的轮密钥是W[4]、W[5]、W[6]、W[7] w[i](4≤i≤43)求法: (1)i不为4的倍数 w[i] = w[i-1] ⊕w[i-4] (2)为4的倍数 w[i]=SubWord(RotWord(w[i-1]))⊕w[i-4]⊕Rcon[i/4] 解释: ①RotWord:将w[i-1]的4个字节循环上移一个字节 ②SubWo…

JVM的类是如何运行的

本文就是讲解 如何将.class文件转换为机器码

U盘中毒文件被隐藏怎么恢复文件?

很多用户都曾经遇到过U盘文件被病毒隐藏的问题,U盘作为拷贝、存储文件最主要的移动存储设备,里面经常存储了重要的文件,如果文件被隐藏了会给用户带来很多麻烦。那么U盘文件被病毒隐藏,应该怎么解决呢?本文列举了有效的…

QT中使用QAxObject类读取xlsx文件内容并显示在ui界面

一、源码 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~MainWindow();pr…

Andrid异步更新UI:Handler(二)深入了解:Message你真的会创建?它是如何子线程和主线程通知?

目录 为什么会有HandlerHandler的原理&#xff0c;以及对象讲解主线程的loop在哪里&#xff0c;为什么主线程loop没有阻塞呢&#xff1f;Looper如何保证唯一Handler为什么会引发内存泄漏呢&#xff1f;Message应该如何创建它&#xff1f; 一、为什么会有Handler 线程分为主线…

软件工程造价师习题练习 18

1.在软件估算过程中&#xff0c;我们主要对项目的规模&#xff0c;质量&#xff0c;进度和成本进行估算 错误 正确 软件估算不对质量进行估算&#xff0c;只对项目的规模&#xff0c;进度&#xff0c;成本进行估算。 答案&#xff1a;错误 2.在使用类比法进行估算时&#xf…

基于单片机的电子指南针设计

摘要&#xff1a;随着科技的进步与发展&#xff0c;尤其是电子技术的推动下社会逐渐向智能化、信息化和人工智能等方面发展。与此同时市场更加需要掌握精确的方位角度信息&#xff0c;服务到生活、产业、出行、航行等各方各面。传统的指南针由于本身的物理特性&#xff0c;抗干…

深度剖析C++string(上篇)

目录 前言 1.C string类 2.string类中的常见构造 3.string类对象的容量操作 4.. string类对象的访问及遍历操作 5. auto和范围for(补充&#xff09; auto关键字 范围for 结束语 前言 C语言我们学习了字符串和字符串的相关函数&#xff0c;在C语言中&#xff0c;字符串是…

【Redis基础1】——使用场景-缓存穿透

目录 1-引言&#xff1a;初始缓存穿透1-1 缓存穿透是什么&#xff1f;(What)1-2 缓存穿透是怎么造成的&#xff1f;(Why) 2- 核心&#xff1a;如何避免缓存穿透&#xff08;How&#xff09;2-1 方案1&#xff1a;缓存空数据2-2 方案2&#xff1a;布隆过滤器2-2-1 布隆过滤器原理…

计算机毕业设计Hive+Hadoop深圳共享单车预测系统 共享单车数据分析可视化大屏 共享单车爬虫 共享单车数据仓库 机器学习 深度学习 PySpark

步骤&#xff1a; 1.Python采集深圳政府公开数据平台的共享单车数据(最大可采集上亿2017-2021数据)&#xff0c;并用百度逆地理编码服务解析经纬度获取位置信息。并将数据上传hdfs&#xff1b; 2.可使用sklearn、卷积神经网络等算法对数据进行分析&#xff0c;对共享单车的订单…

树链剖分学习

1.算法适用&#xff1a;维护树上一段或者某个点的子树权值和&#xff0c;同时支持树上路径大小修改&#xff0c;子树修改 2.实现&#xff1a;将树剖分成一条一条链&#xff0c;重链和轻链。其中&#xff0c;轻链连接非重儿子&#xff0c;重链相反。 3.主体部分&#xff1a; …

Array List 练习(添加手机对象并返回要求的数据)

package ArrayListDemo;import java.util.ArrayList;public class ArrayListDemo7 {public static void main(String[] args) {//1.创建集合对象ArrayList<Phone> list new ArrayList<Phone>();//2.创建手机对象Phone ph1 new Phone("小米",1000);Pho…

06-07 - 文件系统(下)

---- 整理自 王利涛老师 课程 实验环境&#xff1a;宅学部落 www.zhaixue.cc 文章目录 15. 根文件系统15.1 根文件系统的基本概念15.2 挂载根文件系统的三种方式15.3 根文件系统的挂载15.3.1 rootfs 文件系统的概念15.3.2 root 参数分析15.3.3 根目录“ / ” 16. 使用 initrd 作…

智能家居:‌未来生活的崭新篇章

随着科技的飞速发展&#xff0c;‌智能家居正逐渐从概念走向现实&#xff0c;‌为我们的日常生活带来前所未有的便捷与舒适。‌智能家居&#xff0c;‌简而言之&#xff0c;‌就是利用先进的物联网技术、‌人工智能、‌大数据分析等&#xff0c;‌将家中的各种设备连接起来&…

text token通过cross attention来编辑图片

https://zhuanlan.zhihu.com/p/645249016https://zhuanlan.zhihu.com/p/645249016diffusers中的cross-attention实现_diffusers.models.attention.crossattention-CSDN博客文章浏览阅读71次。在models/unets/unet_2d_condition.py中,如何在Unet中将原注意力类替换,Unet中的at…

笔记:Echarts柱状图 实现滚轮条 数据太多

效果&#x1f447;&#x1f447;&#x1f447; 配置&#xff1a;&#x1f447; let option {dataZoom: [{type: "slider",show: true,zoomLock: true,start: 0,end: 20,bottom: 60,height: 10,textStyle: {color: "transparent",fontSize: 9,},fillerColo…

WEB应用服务器 -- Tomcat详解及案例实现

一、Web前端三大核心技术 1.1 HTML HTML&#xff08;HyperText Markup Language&#xff09;超文本标记语言&#xff0c;它不同于一般的编程语言。超文本即超出纯文本的范畴&#xff0c;例如&#xff1a;描述文本颜色、大小、字体等信息&#xff0c;或使用图片、音频、视频等…

Linux 操作系统全览:从文件管理到系统状态掌控

在当今的计算机技术领域&#xff0c;Linux 操作系统以其稳定性、安全性和高度的可定制性而备受青睐。本文将深入探讨 Linux 操作系统的多个重要方面&#xff0c;包括文件管理、文本操作、软件安装、用户和权限管理以及网络和系统状态管理。 一、Linux 文件管理 Linux 的文件系…