使用DGL实现RGCN时报Assertion srcIndex < srcSelectDimSize failed.的解决办法

这个问题在不同的framework上碰到过很多次了。我之前没有用过DGL实现过RGCN,简单看了一下网上的例子,按照这里:

dgl.nn.pytorch.conv.relgraphconv — DGL 0.8.1 documentation

和GCN的区别就是forward中要输入一个表示edge类型的tensor,我就是因为这里的输入有点问题,所以才报错了。具体来说,看这里注释中的例子:

dgl/relgraphconv.py at master · dmlc/dgl · GitHub

输入的tensor,类型下标应该从0开始:

    Examples
    --------
    >>> import dgl
    >>> import numpy as np
    >>> import torch as th
    >>> from dgl.nn import RelGraphConv
    >>>
    >>> g = dgl.graph(([0,1,2,3,2,5], [1,2,3,4,0,3]))
    >>> feat = th.ones(6, 10)
    >>> conv = RelGraphConv(10, 2, 3, regularizer='basis', num_bases=2)
    >>> etype = th.tensor([0,1,2,0,1,2])
    >>> res = conv(g, feat, etype)
    >>> res
    tensor([[ 0.3996, -2.3303],
            [-0.4323, -0.1440],
            [ 0.3996, -2.3303],
            [ 2.1046, -2.8654],
            [-0.4323, -0.1440],
            [-0.1309, -1.0000]], grad_fn=)
    """

但是我输入edge type的时候,竟然是从1开始的,因为懒没有注意到,类似于这种:

ddgraph.edges[records[0],records[1]]['type']=1

联想到这个报错其实很多是和index越界相关的,例如这里说的:Assertion `srcIndex < srcSelectDimSize` failed._kejizuiqianfang的博客-CSDN博客

还有我之前的博客:使用huggingface‘s transformers预训练自己模型时报:Assertion ‘srcIndex < srcSelectDimSize‘ failed. 的解决办法_蛐蛐蛐的博客-CSDN博客

所以改成边的类型编号从0开始,就可以解决这个报错了。

你可能感兴趣的:(深度学习,Python技巧,科研工具,pytorch,python)