torch_geometric.nn消息传递错误

问题描述

我运行了一个在github中找到的项目,并遇到"IndexError: Dimension out of range (expected to be in range of [-1,0],but got -2)".

错误

错误与torch_geometric.nn模块中的 Class messagepassing()有关。

代码来自https://pytorch-geometric.readthedocs.io/en/latest/_modules/torch_geometric/nn/conv/message_passing.html#MessagePassing.propagate

def __collect__(self,args,edge_index,size,kwargs):
    i,j = (1,0) if self.flow == 'source_to_target' else (0,1)

    out = {}
    for arg in args:
        if arg[-2:] not in ['_i','_j']:
            out[arg] = kwargs.get(arg,Parameter.empty)
        else:
            dim = 0 if arg[-2:] == '_j' else 1
            data = kwargs.get(arg[:-2],Parameter.empty)

            if isinstance(data,(tuple,list)):
                assert len(data) == 2
                if isinstance(data[1 - dim],Tensor):
                    self.__set_size__(size,1 - dim,data[1 - dim])  # this is the problem
                data = data[dim]

            if isinstance(data,Tensor):
                self.__set_size__(size,dim,data)
                data = self.__lift__(data,j if arg[-2:] == '_j' else i)

            out[arg] = data

关于自身。 set_size ()函数

def __set_size__(self,size: List[Optional[int]],dim: int,src: Tensor):
    the_size = size[dim]
    if the_size is None:
        size[dim] = src.size(self.node_dim)
    elif the_size != src.size(self.node_dim):
        raise ValueError(
            (f'Encountered tensor with size {src.size(self.node_dim)} in '
             f'dimension {self.node_dim},but expected size {the_size}.'))

我不确定是否是有关数据的问题。如果您知道这种情况有什么问题,请帮助我。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)