这段代码展示了用 PyTorch 训练一个图神经网络模型的典型循环。循环体遍历每个 epoch,包含训练和验证步骤。

训练步骤:

  1. 模型训练模式model.train() 将模型设置为训练模式,启用 dropout 等训练特性的使用。
  2. 优化器梯度清零optimizer.zero_grad() 将优化器的梯度重置为零,以便从头开始计算新的梯度。
  3. 模型前向传播output = model(features, adjtensor) 执行模型前向传播,计算模型的输出。
  4. 损失计算:代码使用两个损失函数:
    • loss_xy:计算分类损失,使用 F.nll_loss(),用于度量模型在训练集上的预测结果与真实标签之间的差异。
    • loss_ncl:计算无监督损失,使用 F.mse_loss(),用于度量模型在无标签数据上的预测结果与平均输出之间的差异。
  5. 总损失计算loss_train = (1-args.lamd)* loss_xy - args.lamd * loss_ncl 将分类损失和无监督损失结合,args.lamd 用于调节两种损失的权重。
  6. 反向传播loss_train.backward() 计算损失函数对模型参数的梯度。
  7. 优化器更新optimizer.step() 根据计算的梯度更新模型参数。

验证步骤:

  1. 模型验证模式model.eval() 将模型设置为验证模式,禁用 dropout 等训练特性的使用。
  2. 模型前向传播output = model(features, adjtensor) 执行模型前向传播,计算模型在验证集上的输出。
  3. 验证损失计算loss_val = F.nll_loss(areout[idx_val], labels[idx_val]) 计算模型在验证集上的分类损失。
  4. 验证准确率计算acc_val = accuracy(areout[idx_val], labels[idx_val]) 计算模型在验证集上的分类准确率。
  5. 早期停止:代码使用一个早期停止机制,当模型在验证集上的损失连续多个 epoch 没有下降,就停止训练。

其他代码说明:

  • acc_train = accuracy(areout[idx_train], labels[idx_train]) 计算训练集上的分类准确率。
  • cost_val.append(loss_val) 记录每个 epoch 的验证损失。
  • torch.save(model, checkpt_file) 将模型保存到磁盘。
  • vacc_mxvlss_mn 分别记录验证集上的最高准确率和最低损失。
  • curr_step 记录验证损失连续上升的 epoch 数量。

这段代码展示了图神经网络模型训练过程中的一些常用技巧,例如使用不同的损失函数、结合监督和无监督学习、以及早期停止机制。

PyTorch 图神经网络训练代码:Epoch 循环、损失函数和早期停止

原文地址: https://www.cveoy.top/t/topic/ihbl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录