训练模型
加载预处理数据集:
可以借助PyTorch的数据处理工具,如 torch.utils 和 torchvision 等
定义损失函数:
既可以自定义,也能使用PyTorch内置的,像回归任务常用 nn.MSELoss() ,分类任务常用 nn.BCELoss()
定义优化方法:
PyTorch的优化方法封装在 torch.optim 中,基于基类 optim.Optimizer ,能实现自定义优化步骤。常用的优化算法如梯度下降及其变种,使用时可像 optimizer = torch.optim.SGD(params, lr = 0.001) 这样设置
循环训练模型
设置训练模式:通过 model.train() 将模型所有模块设为训练模式。
梯度清零:默认梯度累加,需用 optimizer.zero_grad() 手动清零。
求损失值:用 loss_fun(y_prev, y_true) 计算, y_prev 是模型预测值, y_true 是真实值。
反向传播: loss.backward() 自动求导,计算梯度。
更新参数: optimizer.step() 依据计算的梯度更新模型参数。
循环测试/验证模型
设置测试模式:调用 model.eval() 将模型设为测试或验证模式,此时模型中某些层的行为会改变。
计算损失和预测值:在 with torch.no_grad(): 代码块内进行,该代码块可停止梯度计算,节省内存和计算资源。
可视化结果:文中提到后续会举例说明如何构建和训练模型,还解释了 model.train() 与 model.eval() 的使用场景,尤其是在包含Batch Normalization(BN)层和Dropout的模型中,训练和测试时分别调用这两个方法能让模型以合适的方式运行。
实现神经网络实例
目的和背景:旨在借助构建一个用于手写数字识别的神经网络实例,直观展示如何运用PyTorch的 nn 工具箱实现神经网络,并为后续详细介绍 nn 各模块做铺垫。实例运行环境为PyTorch 1.5,可在GPU或CPU上执行,采用MNIST数据集。
主要步骤
数据获取:利用PyTorch内置的 mnist 函数下载MNIST数据集。
数据处理:通过 torchvision 对下载的数据进行预处理,如归一化、转换为张量等操作,并使用 torch.utils 建立数据迭代器,便于按批次读取数据。
数据可视化:将源数据可视化,以便直观了解数据特征,比如展示MNIST数据集中的手写数字图像。
模型构建:运用 nn 工具箱搭建神经网络模型,此模型包含输入层、两个隐藏层和输出层。
模型设置:实例化搭建好的模型,并定义合适的损失函数(如交叉熵损失函数)和优化器(如随机梯度下降优化器)。
模型训练:利用准备好的训练数据对模型进行训练,在训练过程中不断调整模型参数,以最小化损失函数。
结果可视化:将训练结果进行可视化呈现,比如展示训练过程中的损失值变化、模型在测试集上的准确率等。
神经网络结构:该神经网络有两个隐藏层,输入层接收大小为28\times28的图像数据(经展平处理) 。隐藏层使用ReLU激活函数,能引入非线性,增强模型的表达能力。输出层使用softmax激活函数,将输出转换为概率分布,方便确定每个数字类别的预测概率。最后通过 torch.max(out,1) 找出概率最大的索引,作为预测的数字结果。