欢迎来到AI Make Easy频道!在本篇博客中,我们将深入探讨如何利用Jupyter Notebook和著名的MNIST数据集训练一个简单的神经网络,使其能够识别手写数字。MNIST数据集是机器学习领域中一个广泛使用的标准数据集,特别适合初学者入门图像识别任务。本教程将详细介绍从数据集准备、模型构建到训练和评估的完整流程,并提供清晰的代码示例,帮助你轻松上手。 在之前的一篇博客中,我们已经介绍了神经网络的基本工作原理。现在,我们将把这些理论知识应用到实践中。通过本教程,你将学会如何准备MNIST数据集,搭建一个基础但有效的神经网络模型,并使用Jupyter Notebook进行模型训练和测试。我们将一步步地引导你完成整个过程,即使你没有任何先前的经验,也能轻松掌握。 本篇博客不仅提供详细的操作步骤,还会深入讲解关键代码的含义和作用,帮助你理解神经网络训练的底层逻辑。此外,我们还会分享一些优化模型性能的技巧和经验,让你在实践中不断提升自己的技能。准备好了吗?让我们一起开始这段激动人心的AI之旅吧!
使用 pip 安装 torch torchvision 库。
导入必要的库以加载 MNIST 数据集。
MNIST 数据集自动分为训练集和测试集。
训练集用于训练模型,测试集用于评估模型性能。
使用简单的神经网络模型进行手写数字识别。
使用 Jupyter Notebook 进行模型训练和测试。
将图像转换为灰度图以减少计算量。
使用 DataLoader 加载数据集并进行批量处理。
通过调整内部连接(权重和偏差)来减少预测误差。
模型在测试数据集上实现了高达 98% 的准确率。
mnist(modified national institute of standards and technology)数据集是一个广泛应用于机器学习领域的手写数字数据集。它包含了60,000个训练样本和10,000个测试样本,每个样本都是一张28x28像素的灰度图像,代表0到9之间的一个手写数字。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

MNIST数据集因其规模适中、易于获取和处理,成为了许多机器学习算法的基准测试数据集。它特别适合用于入门级的图像识别任务,帮助初学者快速了解和掌握相关技术。
MNIST数据集的特点:
为何选择MNIST数据集?
对于初学者来说,MNIST数据集是一个理想的选择,因为它:
通过使用MNIST数据集,你可以专注于学习神经网络的核心概念和训练流程,而无需花费大量时间在数据准备和环境配置上。
神经网络的训练是一个迭代优化的过程,旨在调整网络的内部参数(权重和偏差),使其能够准确地预测输入数据的标签。一个典型的神经网络训练流程包括以下几个步骤:

训练流程的关键环节:
通过理解神经网络的训练流程,你可以更好地掌握模型训练的技巧和方法,并根据实际情况进行调整和优化。
要使用Jupyter Notebook,最方便的方式是通过Anaconda。Anaconda是一个流行的Python发行版,它包含了大量的科学计算库和工具,包括Jupyter Notebook、NumPy、Pandas、Scikit-learn等。你可以从Anaconda官网(https://www.anaconda.com/download)下载适合你操作系统的版本,然后按照安装向导进行安装。
安装完成后,你可以在开始菜单中找到Anaconda Navigator,这是一个图形用户界面,可以方便地启动Jupyter Notebook和其他工具。

为什么选择Anaconda?
通过安装Anaconda,你可以快速搭建一个完整的Python开发环境,并开始使用Jupyter Notebook进行机器学习实验。
启动Jupyter Notebook有多种方式:
jupyter notebook命令即可启动。Jupyter Notebook会在你的默认浏览器中打开,并显示当前目录下的文件和文件夹。Jupyter Notebook界面:
Jupyter Notebook的界面主要由以下几个部分组成:
新建Notebook:
要新建一个Notebook,可以点击右上角的“New”按钮,然后选择“Python 3”或其他你需要的内核。一个空白的Notebook就会被创建,你可以开始编写代码和文档了。
Jupyter Notebook由一系列的单元格(Cell)组成,每个单元格可以包含代码、Markdown文本或其他内容。你可以通过以下方式操作单元格:
A(在当前单元格上方添加)或B(在当前单元格下方添加)。D,D(连续按两次D键)。C(复制)和X(剪切)。V(在当前单元格下方粘贴)或Shift+V(在当前单元格上方粘贴)。Ctrl+Shift+上箭头或Ctrl+Shift+下箭头。Shift+Enter(运行当前单元格并移动到下一个单元格)或Ctrl+Enter(运行当前单元格但不移动)。单元格类型:
In [ ]:开头,运行结果会显示在Out[ ]:中。Markdown语法:
#符号表示标题级别,如# 一级标题、## 二级标题等。*或-符号表示无序列表,使用数字加.符号表示有序列表。[链接文字](链接地址)表示链接。表示图片。**粗体文字**表示粗体。*斜体文字*表示斜体。通过掌握Jupyter Notebook的基本操作,你可以高效地编写、运行和分享你的机器学习代码和文档。
首先,我们需要准备MNIST数据集。这里我们将使用torchvision库来下载和加载数据集。
# 安装必要的库
!pip install torch torchvision
# 导入必要的库
import torch
import torchvision
import torchvision.transforms as transforms
# 定义数据转换
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,)) # 均值和标准差
])
# 下载MNIST数据集
trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)
# 创建数据加载器
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=False)
# 定义类别
classes = tuple(str(i) for i in range(10))代码解释:
!pip install torch torchvision:使用pip安装torch和torchvision库。torch是PyTorch的核心库,torchvision提供了常用的数据集和模型。transforms.Compose:定义数据转换的流程。transforms.ToTensor()将图像转换为Tensor,transforms.Normalize()对数据进行标准化,使其均值为0,标准差为1,有助于加速训练。torchvision.datasets.MNIST:下载MNIST数据集,并指定存储路径、是否为训练集、是否下载以及数据转换方式。torch.utils.data.DataLoader:创建数据加载器,用于批量加载数据,并指定批量大小和是否打乱顺序。接下来,我们将构建一个简单的神经网络模型。这里我们将使用PyTorch来定义模型。

import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(1, 32, 3, 1)
self.conv2 = nn.Conv2d(32, 64, 3, 1)
self.dropout1 = nn.Dropout(0.25)
self.dropout2 = nn.Dropout(0.5)
self.fc1 = nn.Linear(9216, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = self.conv1(x)
x = F.relu(x)
x = self.conv2(x)
x = F.relu(x)
x = F.max_pool2d(x, 2)
x = self.dropout1(x)
x = torch.flatten(x, 1)
x = self.fc1(x)
x = F.relu(x)
x = self.dropout2(x)
x = self.fc2(x)
output = F.log_softmax(x, dim=1)
return output
model = Net()
print(model)代码解释:
nn.Module:所有神经网络模块的基类。我们需要继承这个类来定义自己的模型。nn.Conv2d:定义卷积层,用于提取图像的特征。第一个参数是输入通道数,第二个参数是输出通道数,第三个参数是卷积核大小,第四个参数是步长。nn.Dropout:定义Dropout层,用于防止过拟合。Dropout层会随机丢弃一些神经元,使其不参与训练。nn.Linear:定义全连接层,用于将卷积层提取的特征映射到类别。F.relu:定义ReLU激活函数,用于增加模型的非线性。F.max_pool2d:定义最大池化层,用于降低特征图的维度。F.log_softmax:定义LogSoftmax函数,用于将输出转换为概率分布。forward函数:定义模型的前向传播过程。在这个函数中,我们将输入数据传递到各个层,并计算最终的输出。现在,我们将使用训练数据集来训练模型。

import torch.optim as optim
# 定义优化器
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 定义损失函数
criterion = nn.CrossEntropyLoss()
# 训练循环
for epoch in range(10): # 迭代10个周期
running_loss = 0.0
for i, data in enumerate(trainloader, 0):
# 获取输入和标签
inputs, labels = data
# 梯度归零
optimizer.zero_grad()
# 前向传播 + 反向传播 + 优化
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
# 打印统计信息
running_loss += loss.item()
if i % 200 == 199: # 每200个mini-batch打印一次
print(f'[{epoch + 1}, {i + 1:5d}] loss: {running_loss / 200:.3f}')
running_loss = 0.0
print('Finished Training')代码解释:
optim.Adam:定义Adam优化器,用于更新模型参数。第一个参数是需要优化的参数,第二个参数是学习率。nn.CrossEntropyLoss:定义交叉熵损失函数,用于衡量模型预测的准确程度。optimizer.zero_grad():梯度归零,防止梯度累积。loss.backward():反向传播,计算梯度。optimizer.step():更新参数。running_loss:记录每个mini-batch的损失值,用于打印统计信息。训练完成后,我们需要使用测试数据集来评估模型的性能。
correct = 0
total = 0
with torch.no_grad():
for data in testloader:
images, labels = data
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f'Accuracy of the network on the 10000 test images: {100 * correct / total:.2f} %')代码解释:
torch.no_grad():关闭梯度计算,减少内存占用。torch.max(outputs.data, 1):获取每个样本的预测类别。correct += (predicted == labels).sum().item():统计预测正确的样本数。测试结果:
在测试数据集上,该模型实现了大约98%的准确率。这表明该模型具有良好的泛化能力,可以准确地识别未见过的手写数字。
总结:
通过本教程,你已经学会了如何使用Jupyter Notebook和MNIST数据集训练一个简单的神经网络,使其能够识别手写数字。你可以尝试修改模型结构、调整超参数,以进一步提高模型性能。
本教程中涉及的所有工具和数据集均为免费资源,无需任何费用即可使用。MNIST数据集可以免费下载,PyTorch和Jupyter Notebook等工具也是开源免费的。
你可以充分利用这些免费资源,进行机器学习实验和项目开发,而无需担心成本问题。
数据集规模适中,适合初学者入门
易于获取和处理,方便快速实验
任务明确,易于理解和评估
大量的教程、代码示例和预训练模型可供参考
? Cons图像分辨率较低,过于简单
数据集相对单一,缺乏多样性
难以代表真实世界的复杂图像识别任务
MNIST数据集的核心特点在于其规范性和易用性:
这些特点使得MNIST数据集成为了机器学习领域的标准数据集,被广泛应用于各种算法的基准测试和教学演示。
一个典型的神经网络模型包含以下几个核心组成部分:
通过合理地组合这些核心组成部分,我们可以构建各种不同的神经网络模型,以解决不同的机器学习问题。
MNIST数据集最常见的应用场景是手写数字识别。通过训练神经网络模型,使其能够准确地识别手写数字,可以应用于各种场景,如:
MNIST数据集也是图像识别领域的入门级数据集。通过使用MNIST数据集,初学者可以学习图像识别的基本概念和技术,如:
通过学习这些概念和技术,可以为进一步研究和应用图像识别技术打下坚实的基础。
什么是MNIST数据集?
MNIST(Modified National Institute of Standards and Technology)数据集是一个广泛应用于机器学习领域的手写数字数据集。它包含了60,000个训练样本和10,000个测试样本,每个样本都是一张28x28像素的灰度图像,代表0到9之间的一个手写数字。
如何下载MNIST数据集?
你可以使用torchvision库来下载MNIST数据集。torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)这行代码会自动下载MNIST数据集,并存储在./data目录下。
如何使用Jupyter Notebook?
Jupyter Notebook是一个交互式的编程环境,可以方便地编写和运行代码、撰写文档。你可以通过Anaconda Navigator或命令行启动Jupyter Notebook,并使用各种快捷键和操作来管理单元格。
如何评估模型性能?
你可以使用测试数据集来评估模型性能。通过计算模型在测试数据集上的准确率、精确率、召回率等指标,可以了解模型的泛化能力。
除了MNIST数据集,还有哪些常用的图像识别数据集?
除了MNIST数据集,还有许多常用的图像识别数据集,如: CIFAR-10: 包含60,000张32x32像素的彩色图像,分为10个类别。 CIFAR-100: 包含60,000张32x32像素的彩色图像,分为100个类别。 ImageNet: 包含超过1400万张图像,分为20,000多个类别。 这些数据集的规模和复杂程度各不相同,可以用于训练和评估各种不同的图像识别算法。
如何提高神经网络模型的性能?
提高神经网络模型性能的方法有很多,如: 增加数据集规模: 更大的数据集可以提供更多的信息,有助于模型学习更复杂的模式。 调整模型结构: 可以尝试不同的层数、每层神经元的数量、激活函数等。 使用数据增强: 通过对现有数据进行变换来增加数据量。 调整超参数: 可以尝试不同的学习率、批量大小、迭代次数等。 使用正则化方法: 如Dropout、L1正则化、L2正则化等,可以防止过拟合。 使用更先进的优化算法: 如Adam、RMSprop等,可以加速训练过程,并提高模型性能。 通过不断地尝试和调整,你可以找到最适合你的任务的模型和参数。
以上就是MNIST数据集:使用Jupyter Notebook训练神经网络的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号