当前位置: 首页 > 工具软件 > OpenNE > 使用案例 >

调试OpenNE的时候报:Attempted relative import in non-package

万俟均
2023-12-01

这两天做实验的时候,发现要调试OpenNE的代码(其实是我自己很粗心的问题,但是总得跟踪调试一下才能发现问题在哪)。

从头开始叙述一下过程:

因为已经在Python 2.7中以egg方式安装了OpenNE,如果调试的话,需要直接下载源码,解压之后进入其src目录,然后运行诸如(由于Eclipse里默认配置的是Python 3,为了避免别的麻烦,使用了命令行):

python openne --method gcn --label-file Linux-2.6.34/label-all --input Linux-2.6.34/edgelist-all --feature-file Linux-2.6.34/feature-all --graph-format edgelist --output Linux-2.6.34/classgraph-all.emd --representation-size 32 --clf-ratio 0.1

或者

python openne/__main__.py --method gcn --label-file Linux-2.6.34/label-all --input Linux-2.6.34/edgelist-all --feature-file Linux-2.6.34/feature-all --graph-format edgelist --output Linux-2.6.34/classgraph-all.emd --representation-size 32 --clf-ratio 0.1

都可以执行其__main__.py文件,但是发现都会报:

from .graph import *
ValueError: Attempted relative import in non-package

之类的错,查了一下原因也很简单,很多朋友都做了解释,不过我觉得解释得都太复杂了,有时候我们并不需要知道那么多原理和细节,简单粗暴跑起来即可。关于细节大家可以参考这篇博客:https://www.cnblogs.com/jiaxin359/p/7580375.html

其实解决方法是很简单的,我们只要加上-m参数即可:

python -m openne --method gcn --label-file Linux-2.6.34/label-all --input Linux-2.6.34/edgelist-all --feature-file Linux-2.6.34/feature-all --graph-format edgelist --output Linux-2.6.34/classgraph-all.emd --representation-size 32 --clf-ratio 0.1

其实大家写博客,有时候简单些更好。

另外再总结一个经验,按照OpenNE的说明,可以通过:--representation-size来指定embedding的维度,不过我使用的时候发现,如果要用SDNE,那么这个参数并不其作用,而要按照SDNE的说明,使用--encoder-list [1000, 128]这种方法来指定。话说,现在ML很多框架这么多参数,是不是应该有软件工程的论文来研究一下那些参数会相互影响和制约啊?这应该是个很有意义的研究点。

 类似资料: