Eids should be a dict of etype and ids for graph with multiple etypes

I have created heterogeneous graph like this:

g = dgl.heterograph({('user','click','item'): (user_click_item_tuple['src'].to_numpy(),user_click_item_tuple['dst'].to_numpy()),
                    ('user','purchase','item'): (user_purchase_item_tuple['src'].to_numpy(),user_purchase_item_tuple['dst'].to_numpy())})

g is as follows:

Graph(num_nodes={'item': 6639, 'user': 47277},
      num_edges={('user', 'click', 'item'): 175145, ('user', 'purchase', 'item'): 44030},
      metagraph=[('user', 'item', 'click'), ('user', 'item', 'purchase')])

I am trying to use the EdgeDataLoader for Link Prediction as:

negative_sampler = dgl.dataloading.negative_sampler.Uniform(5)

sampler = dgl.dataloading.MultiLayerNeighborSampler([4, 4])
train_dataloader = dgl.dataloading.EdgeDataLoader(
    g,                            
    torch.arange(g.number_of_edges()),  
    sampler,                               
    negative_sampler=negative_sampler,      
    device=g.device,                         
    # The following arguments are inherited from PyTorch DataLoader.
    batch_size=1024,    
    shuffle=True,       
    drop_last=False,    
    num_workers=0 
)

For heterogeneous graphs, you will need to provide a dictionary of edge types and IDs as the second argument, like:

train_dataloader = dgl.dataloading.EdgeDataLoader(
    g,
    {'click': torch.arange(g.number_of_edges('click')),
     'purchase': torch.arange(g.number_of_edges('purchase'))}  # or you can replace it
    ...)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.