PyTorch 图神经网络训练代码:Epoch 循环、损失函数和早期停止
这段代码展示了用 PyTorch 训练一个图神经网络模型的典型循环。循环体遍历每个 epoch,包含训练和验证步骤。
训练步骤:
- 模型训练模式:
model.train()将模型设置为训练模式,启用 dropout 等训练特性的使用。 - 优化器梯度清零:
optimizer.zero_grad()将优化器的梯度重置为零,以便从头开始计算新的梯度。 - 模型前向传播:
output = model(features, adjtensor)执行模型前向传播,计算模型的输出。 - 损失计算:代码使用两个损失函数:
loss_xy:计算分类损失,使用F.nll_loss(),用于度量模型在训练集上的预测结果与真实标签之间的差异。loss_ncl:计算无监督损失,使用F.mse_loss(),用于度量模型在无标签数据上的预测结果与平均输出之间的差异。
- 总损失计算:
loss_train = (1-args.lamd)* loss_xy - args.lamd * loss_ncl将分类损失和无监督损失结合,args.lamd用于调节两种损失的权重。 - 反向传播:
loss_train.backward()计算损失函数对模型参数的梯度。 - 优化器更新:
optimizer.step()根据计算的梯度更新模型参数。
验证步骤:
- 模型验证模式:
model.eval()将模型设置为验证模式,禁用 dropout 等训练特性的使用。 - 模型前向传播:
output = model(features, adjtensor)执行模型前向传播,计算模型在验证集上的输出。 - 验证损失计算:
loss_val = F.nll_loss(areout[idx_val], labels[idx_val])计算模型在验证集上的分类损失。 - 验证准确率计算:
acc_val = accuracy(areout[idx_val], labels[idx_val])计算模型在验证集上的分类准确率。 - 早期停止:代码使用一个早期停止机制,当模型在验证集上的损失连续多个 epoch 没有下降,就停止训练。
其他代码说明:
acc_train = accuracy(areout[idx_train], labels[idx_train])计算训练集上的分类准确率。cost_val.append(loss_val)记录每个 epoch 的验证损失。torch.save(model, checkpt_file)将模型保存到磁盘。vacc_mx和vlss_mn分别记录验证集上的最高准确率和最低损失。curr_step记录验证损失连续上升的 epoch 数量。
这段代码展示了图神经网络模型训练过程中的一些常用技巧,例如使用不同的损失函数、结合监督和无监督学习、以及早期停止机制。
原文地址: https://www.cveoy.top/t/topic/ihbl 著作权归作者所有。请勿转载和采集!