Какие элементы из данных в Pytorch Geometric?

Я изучаю GNN и пишу код:

Вводный код из Pytorch Geometricучебного пособия по геометрии Pytorch

      import torch_geometric
from torch_geometric.datasets import Planetoid
dataset = Planetoid(root="tutorial1",name= "Cora")
data = dataset[0]
print(data)
       Data(x=[2708, 1433], edge_index=[2, 10556], y=[2708], train_mask=[2708], val_mask=[2708], test_mask=[2708])
      ##############(I omitted my neural network and train(), which are not related to my question)########

def test():
    model.eval()
    logits, accs = model(), []
    for _, mask in data('train_mask', 'val_mask', 'test_mask'):
        pred = logits[mask].max(1)[1]
        acc = pred.eq(data.y[mask]).sum().item() / mask.sum().item()
        accs.append(acc)
    return accs

Что мне любопытно, так это то, что

        for_, mask in data('train_mask', 'val_mask', 'test_mask):

Потому что я не понимаю, что это за данные ('train_mask', 'val_mask', 'test_mask). Результат

      <generator object Data.__call__ at 0x7f617c8498d0>

Так что я не понимаю, что это такое. Я читал документацию по генератору, но как мне тогда узнать, что это за элементы?

1 ответ

The dataобъект, который вы извлекаете из Planetoidнабор данных представляет собой один график. У вас есть следующие атрибуты:

  • xфункции узла, следовательно, его размер равен количеству узлов (2703), умноженному на размер объекта (1433)
  • edge_indexсписок ребер
  • yметки «наземной истины» / класса или, в этом конкретном случае, классификация статей. Следовательно, его форма - это количество узлов.
  • Три маски: train_mask, val_mask, test_mask. Если я получу к ним доступ через data.train_mask, это дает мне логический тензор с длиной = количеству узлов. Это «разделение по умолчанию» набора данных. Они должны быть непересекающимися, и если Trueсоответствующий узел находится в этом наборе.
Другие вопросы по тегам