我正在阅读Pytorch-Geometric (here)。
在下面的代码中,我们看到在没有train_mask的情况下,data被传递给模型。但是,当将输出和标签传递给损失函数时,train_mask将同时应用于这两个函数。在将data输入到模型中时,我们不是也应该将train_mask应用于它吗?在我看来,这应该不是问题。然而,看起来我们是在浪费未用于训练模型的输出上的计算。
model.train()
for epoch in range(200):
optimizer.zero_grad()
out = model(data)
loss = F.nll_loss(out[data.train_mask], data.y[data.train_mask])
loss.backward()
optimizer.step()发布于 2021-09-30 11:33:28
我认为主要的答案是它使代码变得更加复杂。
你不能简单地说out = model(data[data.train_mask])。(这将引发异常,因为Data对象不支持这种切片方式)。
您可以拥有单独的对象、train_data、test_data等,但这会使代码变得更加复杂。
https://stackoverflow.com/questions/69019682
复制相似问题