MNIST手写数字数据集代码学习

本文介绍了如何在Python中使用TensorFlow库处理MNIST数据集,包括数据加载、预处理、构建简单神经网络模型,以及如何通过调整网络结构、优化参数和使用数据增强来提升模型性能。作者还提供了优化代码的示例,强调了从初级学习到深入实践的过渡需要更全面的学习资源。
摘要由CSDN通过智能技术生成

一.前情提要

1.本文是代码结合知识点注释即为知识点

2.主要详细讲解MNIST代码以及基础知识

3.若想深入学习,建议阅读

附数据集|基于Pytorch框架的【Minst手写数字识别】项目!机器学习新手必备的原理详解+项目实战_哔哩哔哩_bilibili

4.手机上阅读体验不佳,建议电脑阅读!!!

二.简单介绍

MNIST(Modified National Institute of Standards and Technology)是一个经典的手写数字数据集,通常用于机器学习和深度学习的入门练习。它由来自美国国家标准与技术研究所(NIST)的来自 250 个不同人手写的数字构成,其中 60,000 个样本用作训练集,10,000 个样本用作测试集。

MNIST数据集的每个样本都是28x28像素的灰度图像,代表着0到9中的一个数字。这些图像经过了预处理,其中心对齐并缩放到相同的大小。因此,每个图像都可以表示为一个784维的向量(28x28=784),其中每个元素代表像素的亮度值。

由于其简单易用且具有代表性,MNIST数据集成为了机器学习领域的基准测试数据之一,用于评估新算法的性能。许多深度学习框架和算法都会使用MNIST数据集进行示例演示和性能测试。

三.代码学习

import tensorflow as tf

# 加载MNIST数据集

mnist = tf.keras.datasets.mnist

# 加载并分割为训练集和测试集

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

# 数据预处理:将像素值缩放到0到1之间

train_images = train_images / 255.0

test_images = test_images / 255.0

# 构建神经网络模型

model = tf.keras.Sequential([

    # 将28x28的图像展平为一维向量

    tf.keras.layers.Flatten(input_shape=(28, 28)),

    # 添加一个具有128个神经元的全连接隐藏层,使用ReLU激活函数

    tf.keras.layers.Dense(128, activation='relu'),

    # 添加一个具有10个神经元的输出层,使用softmax激活函数,用于分类

    tf.keras.layers.Dense(10, activation='softmax')

])

# 编译模型,指定优化器、损失函数和评估指标

model.compile(optimizer='adam',

              loss='sparse_categorical_crossentropy',

              metrics=['accuracy'])

# 训练模型

model.fit(train_images, train_labels, epochs=5)

# 评估模型

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

print('\nTest accuracy:', test_acc)

这段代码首先加载MNIST数据集,然后进行了数据预处理,包括将像素值缩放到0到1之间。接着构建了一个简单的神经网络模型,包括一个Flatten层用于将图像展平,一个具有128个神经元的隐藏层和一个具有10个神经元的输出层。模型使用adam优化器和交叉熵损失函数进行编译,并使用训练数据进行了5个epoch的训练。最后,使用测试数据评估了模型的性能

四.优化代码

①可以通过以下几种方式:

调整神经网络架构

  1. 增加更多的隐藏层或神经元数量可以提高模型的表示能力,但要注意过拟合的问题。
  2. 尝试不同的激活函数,如 Leaky ReLU、ELU 等,以提高模型的性能。
  3. 添加正则化项,如 L1 正则化、L2 正则化等,以减少过拟合的风险。

调整训练参数

  1. 调整训练的 epoch 数量,可以通过早停法来避免过拟合。
  2. 尝试不同的批量大小,以平衡训练速度和模型性能。

尝试不同的优化器和学习率调度

  1. 使用不同的优化器,如 SGD、Adam、RMSprop 等,以寻找最佳的收敛速度和性能。
  2. 考虑使用学习率调度器,如学习率衰减或动态调整学习率,以优化模型的训练过程。

数据增强

  1. 对训练数据进行增强,如随机旋转、平移、缩放等,以扩充训练数据集,提高模型的泛化能力。

模型集成

  1. 尝试使用集成学习方法,如投票、Bagging、Boosting 等,以提高模型的性能和稳定性。

②示例代码

import tensorflow as tf
from tensorflow.keras import layers

# 加载MNIST数据集
mnist = tf.keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

# 数据预处理
train_images = train_images / 255.0
test_images = test_images / 255.0

# 构建神经网络模型
model = tf.keras.Sequential([
    layers.Flatten(input_shape=(28, 28)),
    layers.Dense(128, activation='relu'),
    layers.Dropout(0.2),  # 添加 Dropout 层以减少过拟合
    layers.Dense(64, activation='relu'),  # 添加额外的隐藏层
    layers.Dropout(0.2),  # 添加 Dropout 层以减少过拟合
    layers.Dense(10, activation='softmax')
])

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

# 训练模型
history = model.fit(train_images, train_labels, epochs=10, validation_split=0.2)

# 评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('\nTest accuracy:', test_acc)

五.最后提示

1.本作仅作初步学习,深入且成体系还是需要上述视频

MNIST手写数字数据集是一个常用的数据集,用于图像分类任务,特别是机器学习和深度学习的入门教程。K-近邻(K-Nearest Neighbors, KNN)算法在这种情况下可以用来做基本的分类。以下是一个使用Python和scikit-learn库实现KNN分类MNIST数据集的简单示例代码: ```python # 导入所需库 from sklearn.datasets import fetch_openml from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import classification_report # 加载MNIST数据集 mnist = fetch_openml('mnist_784', version=1) X, y = mnist['data'], mnist['target'] # 数据预处理 X = X.astype('float32') / 255.0 # 将像素值归一化到0-1范围 y = y.astype('int64') # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 标准化数据 scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) # 创建KNN分类器 knn = KNeighborsClassifier(n_neighbors=5) # 训练模型 knn.fit(X_train, y_train) # 预测测试集 y_pred = knn.predict(X_test) # 评估模型性能 print("Classification Report:") print(classification_report(y_test, y_pred)) # 如果你需要运行完整代码,请确保安装了所需的库(如scikit-learn) ``` 在这个代码中,我们首先加载数据并预处理,然后划分训练集和测试集。接下来,我们创建一个KNN分类器,设置邻居数为5,然后训练模型。最后,我们用测试集进行预测,并打印出分类报告来评估模型的性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值