調試OpenNE的時候報:Attempted relative import in non-package

這兩天做實驗的時候,發現要調試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很多框架這麼多參數,是不是應該有軟件工程的論文來研究一下那些參數會相互影響和制約啊?這應該是個很有意義的研究點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章