def test_to_undirected_with_duplicates(): edge_index = torch.tensor([[0, 0, 1, 1], [0, 1, 0, 2]]) edge_weight = torch.ones(4) data = Data(edge_index=edge_index, edge_weight=edge_weight, num_nodes=3) data = ToUndirected()(data) assert len(data) == 3 assert data.edge_index.tolist() == [[0, 0, 1, 1, 2], [0, 1, 0, 2, 1]] assert data.edge_weight.tolist() == [2, 2, 2, 1, 1] assert data.num_nodes == 3
def test_to_undirected(): assert ToUndirected().__repr__() == 'ToUndirected()' edge_index = torch.tensor([[2, 0, 2], [3, 1, 0]]) edge_weight = torch.randn(edge_index.size(1)) edge_attr = torch.randn(edge_index.size(1), 8) perm = torch.tensor([1, 2, 1, 2, 0, 0]) data = Data(edge_index=edge_index, edge_weight=edge_weight, edge_attr=edge_attr, num_nodes=4) data = ToUndirected()(data) assert len(data) == 4 assert data.edge_index.tolist() == [[0, 0, 1, 2, 2, 3], [1, 2, 0, 0, 3, 2]] assert data.edge_weight.tolist() == edge_weight[perm].tolist() assert data.edge_attr.tolist() == edge_attr[perm].tolist() assert data.num_nodes == 4
dst_mapping=movie_mapping, encoders={'rating': IdentityEncoder(dtype=torch.long)}, ) data = HeteroData() data['user'].num_nodes = len(user_mapping) # Users do not have any features. data['movie'].x = movie_x data['user', 'rates', 'movie'].edge_index = edge_index data['user', 'rates', 'movie'].edge_label = edge_label print(data) # We can now convert `data` into an appropriate format for training a # graph-based machine learning model: # 1. Add a reverse ('movie', 'rev_rates', 'user') relation for message passing. data = ToUndirected()(data) del data['movie', 'rev_rates', 'user'].edge_label # Remove "reverse" label. # 2. Perform a link-level split into training, validation, and test edges. transform = RandomLinkSplit( num_val=0.05, num_test=0.1, neg_sampling_ratio=0.0, edge_types=[('user', 'rates', 'movie')], rev_edge_types=[('movie', 'rev_rates', 'user')], ) train_data, val_data, test_data = transform(data) print(train_data) print(val_data) print(test_data)
parser.add_argument('--dataset', type=str, default='politifact', choices=['politifact', 'gossipcop']) parser.add_argument('--feature', type=str, default='spacy', choices=['profile', 'spacy', 'bert', 'content']) parser.add_argument('--model', type=str, default='GCN', choices=['GCN', 'GAT', 'SAGE']) args = parser.parse_args() path = osp.join(osp.dirname(osp.realpath(__file__)), '..', 'data', 'UPFD') train_dataset = UPFD(path, args.dataset, args.feature, 'train', ToUndirected()) val_dataset = UPFD(path, args.dataset, args.feature, 'val', ToUndirected()) test_dataset = UPFD(path, args.dataset, args.feature, 'test', ToUndirected()) train_loader = DataLoader(train_dataset, batch_size=128, shuffle=True) val_loader = DataLoader(val_dataset, batch_size=128, shuffle=False) test_loader = DataLoader(test_dataset, batch_size=128, shuffle=False) class Net(torch.nn.Module): def __init__(self, model, in_channels, hidden_channels, out_channels, concat=False):