这个代码里用所有的数据输入GCN模型,得到output,然后根据idx_train,idx_val,idx_test分别测试训练、验证和测试精度,但这些数据都已经被模型学习了,会不会存在不合理的情况?之前用unet验证时都是把三个数据集分开的,代码如下:def train(epoch): t = time.time() model.train() optimizer.zero_grad() output = model(features, adj) loss_train = torch.nn.functional.binary_cross_entropy(output[idx_train], labels[idx_train]) # 使用二分类交叉熵损失 acc_train = accuracy(output[idx_train], labels[idx_train]) loss_train.backward() optimizer.step() if not args.fastmode: # Evaluate validation set performance separately, # deactivates dropout during validation run. model.eval() output = model(features, adj) loss_val = torch.nn.functional.binary_cross_entropy(output[idx_val], labels[idx_val]) acc_val = accuracy(output[idx_val], labels[idx_val]) print('Epoch: {:04d}'.format(epoch+1), 'loss_train: {:.4f}'.format(loss_train.item()), 'acc_train: {:.4f}'.format(acc_train.item()), 'loss_val: {:.4f}'.format(loss_val.item()), 'acc_val: {:.4f}'.format(acc_val.item()), 'time: {:.4f}s'.format(time.time() - t)) def test(): model.eval() output = model(features, adj) loss_test = torch.nn.functional.binary_cross_entropy(output[idx_test], labels[idx_test]) acc_test = accuracy(output[idx_test], labels[idx_test]) print("Test set results:", "loss= {:.4f}".format(loss_test.item()), "accuracy= {:.4f}".format(acc_test.item())) # Train model t_total = time.time() for epoch in range(args.epochs): train(epoch) print("Optimization Finished!") print("Total time elapsed: {:.4f}s".format(time.time() - t_total)) # Testing test()
时间: 2023-06-26 13:03:22 浏览: 195
STGCN-PyTorch-master.zip_STGCN 代码分析_STGCN pytorch_stgcn_stgcn d
5星 · 资源好评率100%
在训练过程中,模型是通过学习训练集的数据来进行优化的,因此在测试过程中使用这些数据进行评估是不合理的,因为模型已经看到了这些数据。为了避免这种情况,通常会将数据集分成三个部分:训练集、验证集和测试集。在训练过程中,只使用训练集来进行模型的优化;在验证过程中,使用验证集来确定模型的超参数,如学习速率、正则化参数等;在测试过程中,使用测试集来评估模型的性能。因此,在你提供的代码中,使用了idx_train、idx_val和idx_test来区分训练、验证和测试数据,这是一个很好的做法。
阅读全文