Какие элементы из данных в 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
соответствующий узел находится в этом наборе.