趋近智
requires_grad)backward()).grad)torch.nn 搭建模型torch.nn.Module 基类torch.nn 损失)torch.optim)torch.utils.data.Datasettorchvision.transforms)torch.utils.data.DataLoader训练神经网络是一个迭代优化过程。你为模型提供数据,衡量其预测的准确度,然后微调其内部参数(权重和偏置),以减少这种不准确性。这个循环会重复多次。管理这种重复过程的代码结构通常被称为训练循环。
从宏观上看,训练通常包含两个嵌套循环:
DataLoader负责提供这些批次。与逐个处理样本或一次性使用整个数据集相比,以批次进行训练内存高效,还能带来更稳定的收敛和更好的泛化能力。对于在一个周期内处理的每个批次,训练循环执行一系列明确定义的步骤。让我们分解一下典型迭代中发生的情况:
DataLoader获取下一批输入数据(特征)及其对应的目标标签。在此阶段,确保数据被传输到模型参数所在的正确计算设备(CPU或GPU)也很重要。zero_grad()方法来完成。
# 代码:在新批次处理前重置梯度
optimizer.zero_grad()
# 代码:获取模型预测
predictions = model(input_batch)
predictions与真实的target_batch进行比较,例如用于分类的nn.CrossEntropyLoss或用于回归的nn.MSELoss。损失函数返回一个单一的标量值,表示当前批次的平均误差或差异。这个值显示了模型在这个特定批次上的表现好坏。
# 代码:计算损失
loss = criterion(predictions, target_batch)
$loss.backward()计算损失标量相对于每个requires_grad=True的模型参数的梯度(nn.Module中参数的默认设置)。这些梯度表示损失对每个参数变化的敏感度;本质上,它们告诉优化器如何调整每个权重以降低损失。
# 代码:通过反向传播计算梯度
loss.backward()
$optimizer.step()根据计算出的梯度和优化器的特定算法(如带动量的SGD、Adam等)更新每个参数。目标是朝着最小化损失的方向迈出一小步。
# 代码:更新模型参数
optimizer.step()
训练循环中的一次迭代是模型处理数据并更新参数的完整单元。这个循环为DataLoader提供的每个批次重复进行。一旦所有批次处理完毕,一个周期就完成了,外层循环开始下一个周期,重复整个批次迭代过程。
流程图显示了PyTorch训练循环单次批次迭代中的操作顺序。
这部分内容有帮助吗?
DataLoader、优化器、损失函数、zero_grad()、backward()和step()。这是一个基础指南。© 2026 ApX Machine Learning用心打造