神经网络在机器学习中的应用:手写数字识别

news/2024/7/7 19:33:37 标签: 机器学习, 神经网络, 人工智能

        机器学习人工智能的一个分支,它使计算机能够从数据中学习并做出决策或预测。神经网络作为机器学习的核心算法之一,因其强大的非线性拟合能力而广泛应用于各种领域,包括图像识别、自然语言处理和游戏等。本文将介绍如何使用神经网络对MNIST数据集中的手写数字进行识别。

❤❤❤喜欢的点个关注吧~~~

神经网络基础

神经网络由多个层组成,每层包含多个神经元。每个神经元对输入数据进行加权求和,然后通过一个激活函数来生成输出。最常见的激活函数包括ReLU、Sigmoid和Tanh。神经网络通过前向传播计算输出,并通过反向传播算法调整权重,以此来最小化损失函数。

手写数字识别问题

        MNIST数据集是一个包含了70000个手写数字的图像集,每个图像是一个28x28像素的灰度图,标签是0到9的数字。这个数据集通常用于训练和测试图像识别模型。

使用TensorFlow构建神经网络

        TensorFlow是一个开源的机器学习库,广泛用于神经网络的构建和训练。以下是使用TensorFlow和Keras API构建一个简单的神经网络模型来识别MNIST手写数字的示例代码。

import tensorflow as tf
from tensorflow.keras import layers, models

# 下载MNIST数据集
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# 数据预处理
x_train, x_test = x_train / 255.0, x_test / 255.0
x_train = x_train.reshape(-1, 28, 28, 1)  # 添加单通道维度
x_test = x_test.reshape(-1, 28, 28, 1)

# 构建模型
model = models.Sequential([
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activation='relu'),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activation='relu'),
    layers.Flatten(),
    layers.Dense(64, activation='relu'),
    layers.Dense(10, activation='softmax')
])

# 编译模型
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 训练模型
model.fit(x_train, y_train, epochs=5)

# 评估模型
test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test accuracy:', test_acc)

结果分析

        上述代码首先下载并预处理MNIST数据集,然后构建了一个包含卷积层、池化层和全连接层的神经网络模型。模型使用Adam优化器和稀疏分类交叉熵作为损失函数进行编译。经过5轮迭代训练后,模型在测试集上的准确率可以超过98%。

结论

        神经网络在图像识别任务中表现出色,通过简单的卷积神经网络结构,我们就能在MNIST数据集上达到很高的准确率。随着网络结构的复杂化和训练数据的增加,神经网络的性能还有进一步提升的空间。

        这篇文章和代码提供了一个神经网络机器学习中应用的基本示例。神经网络的潜力巨大,通过不断的研究和开发,它们将在更多领域展现其强大的能力。

请注意,运行上述代码需要安装Python环境和TensorFlow库。您可以通过运行

pip install tensorflow

来安装TensorFlow。

 


http://www.niftyadmin.cn/n/5535137.html

相关文章

【React】上传文章封面基础实现

<Form.Item label"封面"><Form.Item name"type"><Radio.Group onChange{onTypeChange}><Radio value{1}>单图</Radio><Radio value{3}>三图</Radio><Radio value{0}>无图</Radio></Radio.Group&…

ArcGIS Pro SDK (七)编辑 7 操作Blob字段

ArcGIS Pro SDK &#xff08;七&#xff09;编辑 7 操作Blob字段 目录 ArcGIS Pro SDK &#xff08;七&#xff09;编辑 7 操作Blob字段1 使用属性检查器读取和写入 Blob 字段2 在回调中使用行游标读取和写入 Blob 字段 环境&#xff1a;Visual Studio 2022 .NET6 ArcGIS Pro…

探索金融数据API:现代投资的关键工具

在当今快节奏的金融市场中&#xff0c;实时准确的数据对于投资者而言至关重要。金融数据API&#xff08;Application Programming Interface&#xff09;成为了投资者获取和管理数据的核心工具。本文将探讨金融数据API的基本概念、用途及其对投资策略的影响。 什么是金融数据A…

【C++设计模式】(一)面向对象编程的八大原则

文章目录 面向对象编程的八大原则1 单一职责原则2 开放-关闭原则3 里氏替换原则4 接口隔离原则5 依赖倒置原则6 迪米特法则/ 最少知识原则7 合成复用原则8 针对接口编程而不是针对实现编程 面向对象编程的八大原则 面向对象编程有一系列的设计准则来保证软件的质量&#xff0c…

ASPICE培训:推动汽车行业软件质量的新高度

在当今日新月异的汽车行业中&#xff0c;软件技术已经成为推动行业发展的核心动力。随着智能化、网联化、电动化等趋势的加速&#xff0c;汽车软件的质量和性能要求也越来越高。为了满足这一需求&#xff0c;ASPICE&#xff08;Automotive SPICE&#xff09;标准应运而生&#…

.Net C#执行JavaScript脚本

文章目录 前言一、安装二、执行 JavaScript 脚本三、与脚本交互四、JS 调用 C# 方法五、多线程使用总结 前言 ClearScript 是一个 .NET 平台下的开源库&#xff0c;用于在 C# 和其他 .NET 语言中执行脚本代码。它提供了一种方便和安全的方法来将脚本与应用程序集成&#xff0c;…

算法刷题笔记 双链表(C++实现)

文章目录 题目描述基本思路实现代码 题目描述 实现一个双链表&#xff0c;双链表初始为空&#xff0c;支持5种操作&#xff1a; 在最左侧插入一个数&#xff1b;在最右侧插入一个数&#xff1b;将第k个插入的数删除&#xff1b;在第k个插入的数左侧插入一个数&#xff1b;在第k…

嵌入式软件stm32面试

一、STM32的内核型号有哪些? STM32系列是STMicroelectronics(意法半导体)生产的基于ARM Cortex-M内核的微控制器产品线。这些产品按照不同的内核架构和性能特点分为了主流产品、超低功耗产品和高性能产品。 1.1 主流产品 STM32F0 系列:搭载 ARM Cortex-M0 内核。STM32F1 …