用Python玩转人工智能——数字识别技术 之二
目录
二、MNIST 数据集神经网络模型构建课程
(一)课程目标
(二)定义神经网络
1. 关键知识讲授
2. 代码演示
(三)向前传播
1. 关键知识讲授
2. 代码演示
(四)计算损失
1. 关键知识讲授
2. 代码演示
(五)反向传播与更新参数
1. 关键知识讲授
2. 代码演示
(六)课程回顾和小结
二、MNIST 数据集神经网络模型构建课程
(一)课程目标
通过本节课的学习,学员能够理解神经网络构建的基本流程,掌握定义神经网络结构、实现前向传播、计算损失函数、执行反向传播与参数更新的原理及代码实现方法,为后续利用神经网络处理 MNIST 数据集并实现手写数字识别奠定坚实基础。
(二)定义神经网络
1. 关键知识讲授
神经网络由多个层次组成,常见的有输入层、隐藏层和输出层。输入层接收数据,输出层给出预测结果,隐藏层则对数据进行复杂的特征提取和变换。在构建神经网络时,需要确定每一层的神经元数量、层与层之间的连接方式以及激活函数的选择。激活函数赋予神经网络非线性表达能力,常见的激活函数有 Sigmoid、ReLU、Tanh 等 。以 MNIST 数据集为例,输入层神经元数量通常为图像的特征数量,MNIST 图像是 28×28 的灰度图,展开后特征数为 784,所以输入层神经元一般设为 784 个;输出层神经元数量对应分类类别数,MNIST 是 0 - 9 的 10 个数字分类,所以输出层神经元设为 10 个;隐藏层的数量和神经元个数可根据任务复杂程度和模型性能需求进行调整,例如设置 1 - 2 个隐藏层,每个隐藏层包含 128 或 256 个神经元。
2. 代码演示
以 PyTorch 框架为例,定义一个简单的包含一个隐藏层的全连接神经网络:
import torch
import torch.nn as nnclass SimpleNet(nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc1 = nn.Linear(784, 128) # 输入层到隐藏层,784个输入神经元,128个输出神经元self.relu = nn.ReLU() # 使用ReLU作为激活函数self.fc2 = nn.Linear(128, 10) # 隐藏层到输出层,128个输入神经元,10个输出神经元def forward(self, x):x = x.view(-1, 784) # 将输入图像展平为一维向量x = self.fc1(x)x = self.relu(x)x = self.fc2(x)return x# 创建网络实例
model = SimpleNet()
p