三个解决方式简介:
- 修改raw.githubcontent.com在hosts中对应的IP地址
- 手动从GitHub或gitee下载数据,放到对应文件目录位置;或者用Python拉数据下来
- 修改torch_geometric源代码
以下是对这些解决方式的详细介绍(仅以Cora为例,其他数据集不再赘述):
如果顺利的话,应该只需要执行类似这样的代码即可在对应根目录位置下载数据集:
from torch_geometric.datasets import Planetoid
dataset = Planetoid(root='./tmp/cora', name='Cora')
Planetoid文档:https://pytorch-geometric.readthedocs.io/en/latest/modules/datasets.html#torch_geometric.datasets.Planetoid
在planetoid源代码中可以看到,这个类的大致逻辑就是从GitHub下载数据→处理数据。出现无法下载的情况时可能是由于Planetoid从raw.githubcontent.com这个域名下载数据,而这个域名在电脑上被DNS污染。
本文仅考虑这种情况造成的无法下载情况。如果您发现您的机子没有这种问题,那么您可能无法通过本文的手段解决对应的问题。
解决方式一: DNS
可以通过ipaddress.com这个网站获取raw.githubcontent.com对应的IP地址,然后修改hosts,就可以直接下载。
直接挂代理一般也可以解决问题。
解决方式二: 从GitHub或gitee拉数据
一种做法是手动从GitHub或gitee下载数据。
GitHub项目是https://github.com/kimiyoung/planetoid,gitee项目是https://gitee.com/jiajiewu/planetoid。gitee的话在国内会更快点,所以推荐用gitee的。
gitee可以直接在网页上下载单个文件。直接修改网址也可以下载单个文件,具体网址见下面用Python下载数据部分。此外也可以通过git clone的方式把整个项目拉到本地。
GitHub通过插件或者修改网址也可以下载单个文件,但是如果你能通过这种方式下载文件,你的DNS应该没有被污染。
具体需要的数据是这些:
第二种做法是用Python下载对应的文件。
直接把这个网址输到浏览器里面也能下载就是了……
我使用的是这个方式。主要原因是我在服务器上跑的项目,直接把所有事都在Python代码里解决就会比较方便。
base_url参数:
推荐使用gitee的:https://gitee.com/jiajiewu/planetoid/raw/master/data/ind.cora.
github的话可以二选一:https://github.com/kimiyoung/planetoid/raw/master/data/ind.cora.
或https://raw.githubusercontent.com/kimiyoung/planetoid/master/data/ind.cora.
(但问题在于如果你能从这两个网址拉数据……那你……就不应该有不能下载的问题)
注意,这里要通过raw下载数据,如果直接用网页下载数据(如https://gitee.com/jiajiewu/planetoid/blob/master/data/ind.cora.allx
)的话就会下载成网页……我一开始就下载成了网页……这肯定是会报错的。要下数据文件。
可以尝试使用PyG的download_url()
方法下载数据(这是源代码中使用的方式)。其文档地址。
我使用的是requests。别的方式应该也行,就各种直接下载网页文件的方式应该都行。我这里给一个代码:
import requests
names = ['x', 'tx', 'allx', 'y', 'ty', 'ally', 'graph', 'test.index']
for name in names:
file_url=base_url+name
r=requests.get(file_url)
with open('./tmp/cora/Cora/raw/ind.cora.'+name, 'wb') as f:
f.write(r.content)
通过以上两种方式任一来下载需要的数据后,将其放到根目录下Cora/raw
文件夹下,然后再运行dataset = Planetoid(root, name='Cora')
。如无报错并显示如下输出则成功。
Processing…
Done!
Cora()
解决方式三:把planetoid.py里面第48行的 url = 'https://github.com/kimiyoung/planetoid/raw/master/data'
改成 url='https://gitee.com/jiajiewu/planetoid/raw/master/data'
逻辑上就跟第二种解决方式里面从gitee拉数据一样。
参考资料: