Unverified Commit b347590a authored by xiang song(charlie.song)'s avatar xiang song(charlie.song) Committed by GitHub
Browse files

[Dataset] Citation graph (#1902)



* citation graph

* GCN example use new citatoin dataset

* mxnet gat

* triger

* Fix

* Fix gat

* fix

* Fix tensorflow dgi

* Fix appnp, graphsage for mxnet

* fix monet and sgc for mxnet

* Fix tagcn

* update sgc, appnp
Co-authored-by: default avatarUbuntu <ubuntu@ip-172-31-51-214.ec2.internal>
parent 4be4b134
...@@ -4,8 +4,9 @@ import dgl ...@@ -4,8 +4,9 @@ import dgl
import mxnet as mx import mxnet as mx
from mxnet import nd, gluon from mxnet import nd, gluon
from mxnet.gluon import nn from mxnet.gluon import nn
from dgl import DGLGraph import dgl
from dgl.data import register_data_args, load_data from dgl.data import register_data_args
from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
from dgl.nn.mxnet.conv import APPNPConv from dgl.nn.mxnet.conv import APPNPConv
class APPNP(nn.Block): class APPNP(nn.Block):
...@@ -57,13 +58,29 @@ def evaluate(model, features, labels, mask): ...@@ -57,13 +58,29 @@ def evaluate(model, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
features = nd.array(data.features) data = CoraGraphDataset()
labels = nd.array(data.labels) elif args.dataset == 'citeseer':
train_mask = nd.array(data.train_mask) data = CiteseerGraphDataset()
val_mask = nd.array(data.val_mask) elif args.dataset == 'pubmed':
test_mask = nd.array(data.test_mask) data = PubmedGraphDataset()
else:
raise ValueError('Unknown dataset: {}'.format(args.dataset))
g = data[0]
if args.gpu < 0:
cuda = False
ctx = mx.cpu(0)
else:
cuda = True
ctx = mx.gpu(args.gpu)
g = g.to(ctx)
features = g.ndata['feat']
labels = mx.nd.array(g.ndata['label'], dtype="float32", ctx=ctx)
train_mask = g.ndata['train_mask']
val_mask = g.ndata['val_mask']
test_mask = g.ndata['test_mask']
in_feats = features.shape[1] in_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -78,24 +95,9 @@ def main(args): ...@@ -78,24 +95,9 @@ def main(args):
val_mask.sum().asscalar(), val_mask.sum().asscalar(),
test_mask.sum().asscalar())) test_mask.sum().asscalar()))
if args.gpu < 0:
ctx = mx.cpu()
else:
ctx = mx.gpu(args.gpu)
features = features.as_in_context(ctx)
labels = labels.as_in_context(ctx)
train_mask = train_mask.as_in_context(ctx)
val_mask = val_mask.as_in_context(ctx)
test_mask = test_mask.as_in_context(ctx)
# graph preprocess and calculate normalization factor
g = DGLGraph(data.graph)
n_edges = g.number_of_edges()
# add self loop # add self loop
g.add_edges(g.nodes(), g.nodes()) g = dgl.remove_self_loop(g)
g.set_n_initializer(dgl.init.zero_initializer) g = dgl.add_self_loop(g)
g.set_e_initializer(dgl.init.zero_initializer)
# create APPNP model # create APPNP model
model = APPNP(g, model = APPNP(g,
......
...@@ -14,8 +14,10 @@ import time ...@@ -14,8 +14,10 @@ import time
import mxnet as mx import mxnet as mx
from mxnet import gluon from mxnet import gluon
import numpy as np import numpy as np
from dgl import DGLGraph
from dgl.data import register_data_args, load_data import dgl
from dgl.data import register_data_args
from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
from gat import GAT from gat import GAT
from utils import EarlyStopping from utils import EarlyStopping
...@@ -34,33 +36,38 @@ def evaluate(model, features, labels, mask): ...@@ -34,33 +36,38 @@ def evaluate(model, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
data = CoraGraphDataset()
features = mx.nd.array(data.features) elif args.dataset == 'citeseer':
labels = mx.nd.array(data.labels) data = CiteseerGraphDataset()
mask = mx.nd.array(np.where(data.train_mask == 1)) elif args.dataset == 'pubmed':
test_mask = mx.nd.array(np.where(data.test_mask == 1)) data = PubmedGraphDataset()
val_mask = mx.nd.array(np.where(data.val_mask == 1)) else:
in_feats = features.shape[1] raise ValueError('Unknown dataset: {}'.format(args.dataset))
n_classes = data.num_labels
n_edges = data.graph.number_of_edges()
g = data[0]
if args.gpu < 0: if args.gpu < 0:
ctx = mx.cpu() cuda = False
ctx = mx.cpu(0)
else: else:
cuda = True
ctx = mx.gpu(args.gpu) ctx = mx.gpu(args.gpu)
features = features.as_in_context(ctx)
labels = labels.as_in_context(ctx)
mask = mask.as_in_context(ctx)
test_mask = test_mask.as_in_context(ctx)
val_mask = val_mask.as_in_context(ctx)
# create graph
g = data.graph
# add self-loop
g.remove_edges_from(nx.selfloop_edges(g))
g = DGLGraph(g)
g.add_edges(g.nodes(), g.nodes())
g = g.to(ctx) g = g.to(ctx)
features = g.ndata['feat']
labels = mx.nd.array(g.ndata['label'], dtype="float32", ctx=ctx)
mask = g.ndata['train_mask']
mask = mx.nd.array(np.nonzero(mask.asnumpy())[0], ctx=ctx)
val_mask = g.ndata['val_mask']
val_mask = mx.nd.array(np.nonzero(val_mask.asnumpy())[0], ctx=ctx)
test_mask = g.ndata['test_mask']
test_mask = mx.nd.array(np.nonzero(test_mask.asnumpy())[0], ctx=ctx)
in_feats = features.shape[1]
n_classes = data.num_labels
n_edges = data.graph.number_of_edges()
g = dgl.remove_self_loop(g)
g = dgl.add_self_loop(g)
# create model # create model
heads = ([args.num_heads] * args.num_layers) + [args.num_out_heads] heads = ([args.num_heads] * args.num_layers) + [args.num_out_heads]
model = GAT(g, model = GAT(g,
......
...@@ -11,8 +11,8 @@ import mxnet as mx ...@@ -11,8 +11,8 @@ import mxnet as mx
from mxnet import gluon from mxnet import gluon
import dgl import dgl
import dgl.function as fn import dgl.function as fn
from dgl import DGLGraph from dgl.data import register_data_args
from dgl.data import register_data_args, load_data from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
class GCNLayer(gluon.Block): class GCNLayer(gluon.Block):
...@@ -75,16 +75,29 @@ def evaluate(model, features, labels, mask): ...@@ -75,16 +75,29 @@ def evaluate(model, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
data = CoraGraphDataset()
elif args.dataset == 'citeseer':
data = CiteseerGraphDataset()
elif args.dataset == 'pubmed':
data = PubmedGraphDataset()
else:
raise ValueError('Unknown dataset: {}'.format(args.dataset))
if args.self_loop: g = data[0]
data.graph.add_edges_from([(i,i) for i in range(len(data.graph))]) if args.gpu < 0:
cuda = False
ctx = mx.cpu(0)
else:
cuda = True
ctx = mx.gpu(args.gpu)
g = g.to(ctx)
features = mx.nd.array(data.features) features = g.ndata['feat']
labels = mx.nd.array(data.labels) labels = mx.nd.array(g.ndata['label'], dtype="float32", ctx=ctx)
train_mask = mx.nd.array(data.train_mask) train_mask = g.ndata['train_mask']
val_mask = mx.nd.array(data.val_mask) val_mask = g.ndata['val_mask']
test_mask = mx.nd.array(data.test_mask) test_mask = g.ndata['test_mask']
in_feats = features.shape[1] in_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -99,21 +112,10 @@ def main(args): ...@@ -99,21 +112,10 @@ def main(args):
val_mask.sum().asscalar(), val_mask.sum().asscalar(),
test_mask.sum().asscalar())) test_mask.sum().asscalar()))
if args.gpu < 0: # add self loop
cuda = False if args.self_loop:
ctx = mx.cpu(0) g = dgl.remove_self_loop(g)
else: g = dgl.add_self_loop(g)
cuda = True
ctx = mx.gpu(args.gpu)
features = features.as_in_context(ctx)
labels = labels.as_in_context(ctx)
train_mask = train_mask.as_in_context(ctx)
val_mask = val_mask.as_in_context(ctx)
test_mask = test_mask.as_in_context(ctx)
# create GCN model
g = DGLGraph(data.graph)
# normalization # normalization
in_degs = g.in_degrees().astype('float32') in_degs = g.in_degrees().astype('float32')
out_degs = g.out_degrees().astype('float32') out_degs = g.out_degrees().astype('float32')
......
...@@ -6,7 +6,8 @@ import mxnet as mx ...@@ -6,7 +6,8 @@ import mxnet as mx
from mxnet import gluon from mxnet import gluon
import dgl import dgl
from dgl.data import register_data_args, load_data from dgl.data import register_data_args
from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
from gcn import GCN from gcn import GCN
#from gcn_mp import GCN #from gcn_mp import GCN
...@@ -19,13 +20,29 @@ def evaluate(model, features, labels, mask): ...@@ -19,13 +20,29 @@ def evaluate(model, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
features = mx.nd.array(data.features) data = CoraGraphDataset()
labels = mx.nd.array(data.labels) elif args.dataset == 'citeseer':
train_mask = mx.nd.array(data.train_mask) data = CiteseerGraphDataset()
val_mask = mx.nd.array(data.val_mask) elif args.dataset == 'pubmed':
test_mask = mx.nd.array(data.test_mask) data = PubmedGraphDataset()
else:
raise ValueError('Unknown dataset: {}'.format(args.dataset))
g = data[0]
if args.gpu < 0:
cuda = False
ctx = mx.cpu(0)
else:
cuda = True
ctx = mx.gpu(args.gpu)
g = g.to(ctx)
features = g.ndata['feat']
labels = mx.nd.array(g.ndata['label'], dtype="float32", ctx=ctx)
train_mask = g.ndata['train_mask']
val_mask = g.ndata['val_mask']
test_mask = g.ndata['test_mask']
in_feats = features.shape[1] in_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -40,25 +57,10 @@ def main(args): ...@@ -40,25 +57,10 @@ def main(args):
val_mask.sum().asscalar(), val_mask.sum().asscalar(),
test_mask.sum().asscalar())) test_mask.sum().asscalar()))
if args.gpu < 0: # add self loop
cuda = False
ctx = mx.cpu(0)
else:
cuda = True
ctx = mx.gpu(args.gpu)
features = features.as_in_context(ctx)
labels = labels.as_in_context(ctx)
train_mask = train_mask.as_in_context(ctx)
val_mask = val_mask.as_in_context(ctx)
test_mask = test_mask.as_in_context(ctx)
# create GCN model
g = data.graph
if args.self_loop: if args.self_loop:
g.remove_edges_from(nx.selfloop_edges(g)) g = dgl.remove_self_loop(g)
g.add_edges_from(zip(g.nodes(), g.nodes())) g = dgl.add_self_loop(g)
g = dgl.graph(g).to(ctx)
# normalization # normalization
degs = g.in_degrees().astype('float32') degs = g.in_degrees().astype('float32')
norm = mx.nd.power(degs, -0.5) norm = mx.nd.power(degs, -0.5)
......
...@@ -11,8 +11,9 @@ import networkx as nx ...@@ -11,8 +11,9 @@ import networkx as nx
import mxnet as mx import mxnet as mx
from mxnet import nd, gluon from mxnet import nd, gluon
from mxnet.gluon import nn from mxnet.gluon import nn
from dgl import DGLGraph import dgl
from dgl.data import register_data_args, load_data from dgl.data import register_data_args
from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
from dgl.nn.mxnet.conv import SAGEConv from dgl.nn.mxnet.conv import SAGEConv
...@@ -52,13 +53,29 @@ def evaluate(model, features, labels, mask): ...@@ -52,13 +53,29 @@ def evaluate(model, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
features = nd.array(data.features) data = CoraGraphDataset()
labels = nd.array(data.labels) elif args.dataset == 'citeseer':
train_mask = nd.array(data.train_mask) data = CiteseerGraphDataset()
val_mask = nd.array(data.val_mask) elif args.dataset == 'pubmed':
test_mask = nd.array(data.test_mask) data = PubmedGraphDataset()
else:
raise ValueError('Unknown dataset: {}'.format(args.dataset))
g = data[0]
if args.gpu < 0:
cuda = False
ctx = mx.cpu(0)
else:
cuda = True
ctx = mx.gpu(args.gpu)
g = g.to(ctx)
features = g.ndata['feat']
labels = mx.nd.array(g.ndata['label'], dtype="float32", ctx=ctx)
train_mask = g.ndata['train_mask']
val_mask = g.ndata['val_mask']
test_mask = g.ndata['test_mask']
in_feats = features.shape[1] in_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -73,22 +90,9 @@ def main(args): ...@@ -73,22 +90,9 @@ def main(args):
val_mask.sum().asscalar(), val_mask.sum().asscalar(),
test_mask.sum().asscalar())) test_mask.sum().asscalar()))
if args.gpu < 0: # add self loop
ctx = mx.cpu(0) g = dgl.remove_self_loop(g)
else: g = dgl.add_self_loop(g)
ctx = mx.gpu(args.gpu)
print("use cuda:", args.gpu)
features = features.as_in_context(ctx)
labels = labels.as_in_context(ctx)
train_mask = train_mask.as_in_context(ctx)
val_mask = val_mask.as_in_context(ctx)
test_mask = test_mask.as_in_context(ctx)
# graph preprocess and calculate normalization factor
g = data.graph
g.remove_edges_from(nx.selfloop_edges(g))
g = DGLGraph(g)
n_edges = g.number_of_edges() n_edges = g.number_of_edges()
# create GraphSAGE model # create GraphSAGE model
......
...@@ -5,8 +5,9 @@ import networkx as nx ...@@ -5,8 +5,9 @@ import networkx as nx
import mxnet as mx import mxnet as mx
from mxnet import gluon, nd from mxnet import gluon, nd
from mxnet.gluon import nn from mxnet.gluon import nn
from dgl import DGLGraph import dgl
from dgl.data import register_data_args, load_data from dgl.data import register_data_args
from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
from dgl.nn.mxnet.conv import GMMConv from dgl.nn.mxnet.conv import GMMConv
...@@ -59,13 +60,29 @@ def evaluate(model, features, pseudo, labels, mask): ...@@ -59,13 +60,29 @@ def evaluate(model, features, pseudo, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
features = nd.array(data.features) data = CoraGraphDataset()
labels = nd.array(data.labels) elif args.dataset == 'citeseer':
train_mask = nd.array(data.train_mask) data = CiteseerGraphDataset()
val_mask = nd.array(data.val_mask) elif args.dataset == 'pubmed':
test_mask = nd.array(data.test_mask) data = PubmedGraphDataset()
else:
raise ValueError('Unknown dataset: {}'.format(args.dataset))
g = data[0]
if args.gpu < 0:
cuda = False
ctx = mx.cpu(0)
else:
cuda = True
ctx = mx.gpu(args.gpu)
g = g.to(ctx)
features = g.ndata['feat']
labels = mx.nd.array(g.ndata['label'], dtype="float32", ctx=ctx)
train_mask = g.ndata['train_mask']
val_mask = g.ndata['val_mask']
test_mask = g.ndata['test_mask']
in_feats = features.shape[1] in_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -80,29 +97,19 @@ def main(args): ...@@ -80,29 +97,19 @@ def main(args):
val_mask.sum().asscalar(), val_mask.sum().asscalar(),
test_mask.sum().asscalar())) test_mask.sum().asscalar()))
if args.gpu < 0: # add self loop
ctx = mx.cpu(0) g = dgl.remove_self_loop(g)
else: g = dgl.add_self_loop(g)
ctx = mx.gpu(args.gpu)
print("use cuda:", args.gpu)
features = features.as_in_context(ctx)
labels = labels.as_in_context(ctx)
train_mask = train_mask.as_in_context(ctx)
val_mask = val_mask.as_in_context(ctx)
test_mask = test_mask.as_in_context(ctx)
# graph preprocess and calculate normalization factor
g = data.graph
g.remove_edges_from(nx.selfloop_edges(g))
g = DGLGraph(g)
n_edges = g.number_of_edges() n_edges = g.number_of_edges()
us, vs = g.edges() us, vs = g.edges()
us = us.asnumpy()
vs = vs.asnumpy()
pseudo = [] pseudo = []
for i in range(g.number_of_edges()): for i in range(g.number_of_edges()):
pseudo.append([ pseudo.append([
1 / np.sqrt(g.in_degree(us[i].asscalar())), 1 / np.sqrt(g.in_degree(us[i])),
1 / np.sqrt(g.in_degree(vs[i].asscalar())) 1 / np.sqrt(g.in_degree(vs[i]))
]) ])
pseudo = nd.array(pseudo, ctx=ctx) pseudo = nd.array(pseudo, ctx=ctx)
......
...@@ -10,8 +10,9 @@ import numpy as np ...@@ -10,8 +10,9 @@ import numpy as np
import mxnet as mx import mxnet as mx
from mxnet import nd, gluon from mxnet import nd, gluon
from mxnet.gluon import nn from mxnet.gluon import nn
from dgl import DGLGraph import dgl
from dgl.data import register_data_args, load_data from dgl.data import register_data_args
from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
from dgl.nn.mxnet.conv import SGConv from dgl.nn.mxnet.conv import SGConv
...@@ -22,13 +23,29 @@ def evaluate(model, g, features, labels, mask): ...@@ -22,13 +23,29 @@ def evaluate(model, g, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
features = nd.array(data.features) data = CoraGraphDataset()
labels = nd.array(data.labels) elif args.dataset == 'citeseer':
train_mask = nd.array(data.train_mask) data = CiteseerGraphDataset()
val_mask = nd.array(data.val_mask) elif args.dataset == 'pubmed':
test_mask = nd.array(data.test_mask) data = PubmedGraphDataset()
else:
raise ValueError('Unknown dataset: {}'.format(args.dataset))
g = data[0]
if args.gpu < 0:
cuda = False
ctx = mx.cpu(0)
else:
cuda = True
ctx = mx.gpu(args.gpu)
g = g.to(ctx)
features = g.ndata['feat']
labels = mx.nd.array(g.ndata['label'], dtype="float32", ctx=ctx)
train_mask = g.ndata['train_mask']
val_mask = g.ndata['val_mask']
test_mask = g.ndata['test_mask']
in_feats = features.shape[1] in_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -43,22 +60,9 @@ def main(args): ...@@ -43,22 +60,9 @@ def main(args):
val_mask.sum().asscalar(), val_mask.sum().asscalar(),
test_mask.sum().asscalar())) test_mask.sum().asscalar()))
if args.gpu < 0:
ctx = mx.cpu(0)
else:
ctx = mx.gpu(args.gpu)
features = features.as_in_context(ctx)
labels = labels.as_in_context(ctx)
train_mask = train_mask.as_in_context(ctx)
val_mask = val_mask.as_in_context(ctx)
test_mask = test_mask.as_in_context(ctx)
# graph preprocess and calculate normalization factor
g = DGLGraph(data.graph)
n_edges = g.number_of_edges()
# add self loop # add self loop
g.add_edges(g.nodes(), g.nodes()) g = dgl.remove_self_loop(g)
g = dgl.add_self_loop(g)
# create SGC model # create SGC model
model = SGConv(in_feats, model = SGConv(in_feats,
......
...@@ -4,8 +4,9 @@ import networkx as nx ...@@ -4,8 +4,9 @@ import networkx as nx
import mxnet as mx import mxnet as mx
from mxnet import gluon from mxnet import gluon
from dgl import DGLGraph import dgl
from dgl.data import register_data_args, load_data from dgl.data import register_data_args
from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
from tagcn import TAGCN from tagcn import TAGCN
...@@ -16,12 +17,29 @@ def evaluate(model, features, labels, mask): ...@@ -16,12 +17,29 @@ def evaluate(model, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
features = mx.nd.array(data.features) data = CoraGraphDataset()
labels = mx.nd.array(data.labels) elif args.dataset == 'citeseer':
train_mask = mx.nd.array(data.train_mask) data = CiteseerGraphDataset()
val_mask = mx.nd.array(data.val_mask) elif args.dataset == 'pubmed':
test_mask = mx.nd.array(data.test_mask) data = PubmedGraphDataset()
else:
raise ValueError('Unknown dataset: {}'.format(args.dataset))
g = data[0]
if args.gpu < 0:
cuda = False
ctx = mx.cpu(0)
else:
cuda = True
ctx = mx.gpu(args.gpu)
g = g.to(ctx)
features = g.ndata['feat']
labels = mx.nd.array(g.ndata['label'], dtype="float32", ctx=ctx)
train_mask = g.ndata['train_mask']
val_mask = g.ndata['val_mask']
test_mask = g.ndata['test_mask']
in_feats = features.shape[1] in_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -36,26 +54,9 @@ def main(args): ...@@ -36,26 +54,9 @@ def main(args):
val_mask.sum().asscalar(), val_mask.sum().asscalar(),
test_mask.sum().asscalar())) test_mask.sum().asscalar()))
if args.gpu < 0:
cuda = False
ctx = mx.cpu(0)
else:
cuda = True
ctx = mx.gpu(args.gpu)
features = features.as_in_context(ctx)
labels = labels.as_in_context(ctx)
train_mask = train_mask.as_in_context(ctx)
val_mask = val_mask.as_in_context(ctx)
test_mask = test_mask.as_in_context(ctx)
# graph preprocess and calculate normalization factor
g = data.graph
# add self loop # add self loop
if args.self_loop: g = dgl.remove_self_loop(g)
g.remove_edges_from(nx.selfloop_edges(g)) g = dgl.add_self_loop(g)
g.add_edges_from(zip(g.nodes(), g.nodes()))
g = DGLGraph(g)
# create TAGCN model # create TAGCN model
model = TAGCN(g, model = TAGCN(g,
......
...@@ -3,8 +3,8 @@ import numpy as np ...@@ -3,8 +3,8 @@ import numpy as np
import torch import torch
import torch.nn as nn import torch.nn as nn
import torch.nn.functional as F import torch.nn.functional as F
from dgl import DGLGraph from dgl.data import register_data_args
from dgl.data import register_data_args, load_data from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
import dgl import dgl
from appnp import APPNP from appnp import APPNP
...@@ -22,17 +22,27 @@ def evaluate(model, features, labels, mask): ...@@ -22,17 +22,27 @@ def evaluate(model, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
features = torch.FloatTensor(data.features) data = CoraGraphDataset()
labels = torch.LongTensor(data.labels) elif args.dataset == 'citeseer':
if hasattr(torch, 'BoolTensor'): data = CiteseerGraphDataset()
train_mask = torch.BoolTensor(data.train_mask) elif args.dataset == 'pubmed':
val_mask = torch.BoolTensor(data.val_mask) data = PubmedGraphDataset()
test_mask = torch.BoolTensor(data.test_mask)
else: else:
train_mask = torch.ByteTensor(data.train_mask) raise ValueError('Unknown dataset: {}'.format(args.dataset))
val_mask = torch.ByteTensor(data.val_mask)
test_mask = torch.ByteTensor(data.test_mask) g = data[0]
if args.gpu < 0:
cuda = False
else:
cuda = True
g = g.to(args.gpu)
features = g.ndata['feat']
labels = g.ndata['label']
train_mask = g.ndata['train_mask']
val_mask = g.ndata['val_mask']
test_mask = g.ndata['test_mask']
in_feats = features.shape[1] in_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -47,27 +57,10 @@ def main(args): ...@@ -47,27 +57,10 @@ def main(args):
val_mask.int().sum().item(), val_mask.int().sum().item(),
test_mask.int().sum().item())) test_mask.int().sum().item()))
if args.gpu < 0:
cuda = False
else:
cuda = True
torch.cuda.set_device(args.gpu)
features = features.cuda()
labels = labels.cuda()
train_mask = train_mask.cuda()
val_mask = val_mask.cuda()
test_mask = test_mask.cuda()
# graph preprocess and calculate normalization factor
g = DGLGraph(data.graph)
n_edges = g.number_of_edges() n_edges = g.number_of_edges()
# add self loop # add self loop
g.add_edges(g.nodes(), g.nodes()) g = dgl.remove_self_loop(g)
g.set_n_initializer(dgl.init.zero_initializer) g = dgl.add_self_loop(g)
g.set_e_initializer(dgl.init.zero_initializer)
if args.gpu >= 0:
g = g.to(args.gpu)
# create APPNP model # create APPNP model
model = APPNP(g, model = APPNP(g,
......
...@@ -14,8 +14,10 @@ import networkx as nx ...@@ -14,8 +14,10 @@ import networkx as nx
import time import time
import torch import torch
import torch.nn.functional as F import torch.nn.functional as F
from dgl import DGLGraph import dgl
from dgl.data import register_data_args, load_data from dgl.data import register_data_args
from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
from gat import GAT from gat import GAT
from utils import EarlyStopping from utils import EarlyStopping
...@@ -37,17 +39,27 @@ def evaluate(model, features, labels, mask): ...@@ -37,17 +39,27 @@ def evaluate(model, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
features = torch.FloatTensor(data.features) data = CoraGraphDataset()
labels = torch.LongTensor(data.labels) elif args.dataset == 'citeseer':
if hasattr(torch, 'BoolTensor'): data = CiteseerGraphDataset()
train_mask = torch.BoolTensor(data.train_mask) elif args.dataset == 'pubmed':
val_mask = torch.BoolTensor(data.val_mask) data = PubmedGraphDataset()
test_mask = torch.BoolTensor(data.test_mask)
else: else:
train_mask = torch.ByteTensor(data.train_mask) raise ValueError('Unknown dataset: {}'.format(args.dataset))
val_mask = torch.ByteTensor(data.val_mask)
test_mask = torch.ByteTensor(data.test_mask) g = data[0]
if args.gpu < 0:
cuda = False
else:
cuda = True
g = g.to(args.gpu)
features = g.ndata['feat']
labels = g.ndata['label']
train_mask = g.ndata['train_mask']
val_mask = g.ndata['val_mask']
test_mask = g.ndata['test_mask']
num_feats = features.shape[1] num_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -62,24 +74,9 @@ def main(args): ...@@ -62,24 +74,9 @@ def main(args):
val_mask.int().sum().item(), val_mask.int().sum().item(),
test_mask.int().sum().item())) test_mask.int().sum().item()))
if args.gpu < 0:
cuda = False
else:
cuda = True
torch.cuda.set_device(args.gpu)
features = features.cuda()
labels = labels.cuda()
train_mask = train_mask.cuda()
val_mask = val_mask.cuda()
test_mask = test_mask.cuda()
g = data.graph
# add self loop # add self loop
g.remove_edges_from(nx.selfloop_edges(g)) g = dgl.remove_self_loop(g)
g = DGLGraph(g) g = dgl.add_self_loop(g)
g.add_edges(g.nodes(), g.nodes())
if cuda:
g = g.to(args.gpu)
n_edges = g.number_of_edges() n_edges = g.number_of_edges()
# create model # create model
heads = ([args.num_heads] * args.num_layers) + [args.num_out_heads] heads = ([args.num_heads] * args.num_layers) + [args.num_out_heads]
......
...@@ -11,8 +11,9 @@ import networkx as nx ...@@ -11,8 +11,9 @@ import networkx as nx
import torch import torch
import torch.nn as nn import torch.nn as nn
import torch.nn.functional as F import torch.nn.functional as F
from dgl import DGLGraph import dgl
from dgl.data import register_data_args, load_data from dgl.data import register_data_args
from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
def gcn_msg(edge): def gcn_msg(edge):
...@@ -116,17 +117,27 @@ def evaluate(model, features, labels, mask): ...@@ -116,17 +117,27 @@ def evaluate(model, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
features = torch.FloatTensor(data.features) data = CoraGraphDataset()
labels = torch.LongTensor(data.labels) elif args.dataset == 'citeseer':
if hasattr(torch, 'BoolTensor'): data = CiteseerGraphDataset()
train_mask = torch.BoolTensor(data.train_mask) elif args.dataset == 'pubmed':
val_mask = torch.BoolTensor(data.val_mask) data = PubmedGraphDataset()
test_mask = torch.BoolTensor(data.test_mask)
else: else:
train_mask = torch.ByteTensor(data.train_mask) raise ValueError('Unknown dataset: {}'.format(args.dataset))
val_mask = torch.ByteTensor(data.val_mask)
test_mask = torch.ByteTensor(data.test_mask) g = data[0]
if args.gpu < 0:
cuda = False
else:
cuda = True
g = g.to(args.gpu)
features = g.ndata['feat']
labels = g.ndata['label']
train_mask = g.ndata['train_mask']
val_mask = g.ndata['val_mask']
test_mask = g.ndata['test_mask']
in_feats = features.shape[1] in_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -141,24 +152,11 @@ def main(args): ...@@ -141,24 +152,11 @@ def main(args):
val_mask.int().sum().item(), val_mask.int().sum().item(),
test_mask.int().sum().item())) test_mask.int().sum().item()))
if args.gpu < 0:
cuda = False
else:
cuda = True
torch.cuda.set_device(args.gpu)
features = features.cuda()
labels = labels.cuda()
train_mask = train_mask.cuda()
val_mask = val_mask.cuda()
test_mask = test_mask.cuda()
# graph preprocess and calculate normalization factor
g = data.graph
g.remove_edges_from(nx.selfloop_edges(g))
g = DGLGraph(g)
# add self loop # add self loop
g.add_edges(g.nodes(), g.nodes()) g = dgl.remove_self_loop(g)
g = dgl.add_self_loop(g)
n_edges = g.number_of_edges() n_edges = g.number_of_edges()
# normalization # normalization
degs = g.in_degrees().float() degs = g.in_degrees().float()
norm = torch.pow(degs, -0.5) norm = torch.pow(degs, -0.5)
......
...@@ -4,8 +4,9 @@ import networkx as nx ...@@ -4,8 +4,9 @@ import networkx as nx
import torch import torch
import torch.nn as nn import torch.nn as nn
import torch.nn.functional as F import torch.nn.functional as F
from dgl import DGLGraph import dgl
from dgl.data import register_data_args, load_data from dgl.data import register_data_args
from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
from gcn import GCN from gcn import GCN
#from gcn_mp import GCN #from gcn_mp import GCN
...@@ -23,17 +24,27 @@ def evaluate(model, features, labels, mask): ...@@ -23,17 +24,27 @@ def evaluate(model, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
features = torch.FloatTensor(data.features) data = CoraGraphDataset()
labels = torch.LongTensor(data.labels) elif args.dataset == 'citeseer':
if hasattr(torch, 'BoolTensor'): data = CiteseerGraphDataset()
train_mask = torch.BoolTensor(data.train_mask) elif args.dataset == 'pubmed':
val_mask = torch.BoolTensor(data.val_mask) data = PubmedGraphDataset()
test_mask = torch.BoolTensor(data.test_mask)
else: else:
train_mask = torch.ByteTensor(data.train_mask) raise ValueError('Unknown dataset: {}'.format(args.dataset))
val_mask = torch.ByteTensor(data.val_mask)
test_mask = torch.ByteTensor(data.test_mask) g = data[0]
if args.gpu < 0:
cuda = False
else:
cuda = True
g = g.to(args.gpu)
features = g.ndata['feat']
labels = g.ndata['label']
train_mask = g.ndata['train_mask']
val_mask = g.ndata['val_mask']
test_mask = g.ndata['test_mask']
in_feats = features.shape[1] in_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -48,27 +59,12 @@ def main(args): ...@@ -48,27 +59,12 @@ def main(args):
val_mask.int().sum().item(), val_mask.int().sum().item(),
test_mask.int().sum().item())) test_mask.int().sum().item()))
if args.gpu < 0:
cuda = False
else:
cuda = True
torch.cuda.set_device(args.gpu)
features = features.cuda()
labels = labels.cuda()
train_mask = train_mask.cuda()
val_mask = val_mask.cuda()
test_mask = test_mask.cuda()
# graph preprocess and calculate normalization factor
g = data.graph
# add self loop # add self loop
if args.self_loop: if args.self_loop:
g.remove_edges_from(nx.selfloop_edges(g)) g = dgl.remove_self_loop(g)
g.add_edges_from(zip(g.nodes(), g.nodes())) g = dgl.add_self_loop(g)
g = DGLGraph(g)
n_edges = g.number_of_edges() n_edges = g.number_of_edges()
if cuda:
g = g.to(args.gpu)
# normalization # normalization
degs = g.in_degrees().float() degs = g.in_degrees().float()
norm = torch.pow(degs, -0.5) norm = torch.pow(degs, -0.5)
......
...@@ -11,8 +11,9 @@ import torch ...@@ -11,8 +11,9 @@ import torch
import torch.nn as nn import torch.nn as nn
import torch.nn.functional as F import torch.nn.functional as F
import dgl.function as fn import dgl.function as fn
from dgl import DGLGraph import dgl
from dgl.data import register_data_args, load_data from dgl.data import register_data_args
from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
from dgl.nn.pytorch.conv import SGConv from dgl.nn.pytorch.conv import SGConv
...@@ -27,17 +28,27 @@ def evaluate(model, g, features, labels, mask): ...@@ -27,17 +28,27 @@ def evaluate(model, g, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
features = torch.FloatTensor(data.features) data = CoraGraphDataset()
labels = torch.LongTensor(data.labels) elif args.dataset == 'citeseer':
if hasattr(torch, 'BoolTensor'): data = CiteseerGraphDataset()
train_mask = torch.BoolTensor(data.train_mask) elif args.dataset == 'pubmed':
val_mask = torch.BoolTensor(data.val_mask) data = PubmedGraphDataset()
test_mask = torch.BoolTensor(data.test_mask)
else: else:
train_mask = torch.ByteTensor(data.train_mask) raise ValueError('Unknown dataset: {}'.format(args.dataset))
val_mask = torch.ByteTensor(data.val_mask)
test_mask = torch.ByteTensor(data.test_mask) g = data[0]
if args.gpu < 0:
cuda = False
else:
cuda = True
g = g.to(args.gpu)
features = g.ndata['feat']
labels = g.ndata['label']
train_mask = g.ndata['train_mask']
val_mask = g.ndata['val_mask']
test_mask = g.ndata['test_mask']
in_feats = features.shape[1] in_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -52,22 +63,10 @@ def main(args): ...@@ -52,22 +63,10 @@ def main(args):
val_mask.int().sum().item(), val_mask.int().sum().item(),
test_mask.int().sum().item())) test_mask.int().sum().item()))
if args.gpu < 0:
cuda = False
else:
cuda = True
torch.cuda.set_device(args.gpu)
features = features.cuda()
labels = labels.cuda()
train_mask = train_mask.cuda()
val_mask = val_mask.cuda()
test_mask = test_mask.cuda()
# graph preprocess and calculate normalization factor
g = DGLGraph(data.graph)
n_edges = g.number_of_edges() n_edges = g.number_of_edges()
# add self loop # add self loop
g.add_edges(g.nodes(), g.nodes()) g = dgl.remove_self_loop(g)
g = dgl.add_self_loop(g)
# create SGC model # create SGC model
model = SGConv(in_feats, model = SGConv(in_feats,
...@@ -78,7 +77,6 @@ def main(args): ...@@ -78,7 +77,6 @@ def main(args):
if cuda: if cuda:
model.cuda() model.cuda()
g = g.to(args.gpu)
loss_fcn = torch.nn.CrossEntropyLoss() loss_fcn = torch.nn.CrossEntropyLoss()
# use optimizer # use optimizer
......
...@@ -4,8 +4,9 @@ import numpy as np ...@@ -4,8 +4,9 @@ import numpy as np
import networkx as nx import networkx as nx
import tensorflow as tf import tensorflow as tf
from tensorflow.keras import layers from tensorflow.keras import layers
from dgl import DGLGraph import dgl
from dgl.data import register_data_args, load_data from dgl.data import register_data_args
from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
from dgi import DGI, Classifier from dgi import DGI, Classifier
...@@ -20,28 +21,36 @@ def evaluate(model, features, labels, mask): ...@@ -20,28 +21,36 @@ def evaluate(model, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
data = CoraGraphDataset()
elif args.dataset == 'citeseer':
data = CiteseerGraphDataset()
elif args.dataset == 'pubmed':
data = PubmedGraphDataset()
else:
raise ValueError('Unknown dataset: {}'.format(args.dataset))
g = data[0]
if args.gpu < 0: if args.gpu < 0:
device = "/cpu:0" device = "/cpu:0"
else: else:
device = "/gpu:{}".format(args.gpu) device = "/gpu:{}".format(args.gpu)
g = g.to(device)
with tf.device(device): with tf.device(device):
features = tf.convert_to_tensor(data.features, dtype=tf.float32) features = g.ndata['feat']
labels = tf.convert_to_tensor(data.labels, dtype=tf.int64) labels = g.ndata['label']
train_mask = tf.convert_to_tensor(data.train_mask, dtype=tf.bool) train_mask = g.ndata['train_mask']
val_mask = tf.convert_to_tensor(data.val_mask, dtype=tf.bool) val_mask = g.ndata['val_mask']
test_mask = tf.convert_to_tensor(data.test_mask, dtype=tf.bool) test_mask = g.ndata['test_mask']
in_feats = features.shape[1] in_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
# graph preprocess
g = data.graph
# add self loop # add self loop
if args.self_loop: if args.self_loop:
g.remove_edges_from(nx.selfloop_edges(g)) g = dgl.remove_self_loop(g)
g.add_edges_from(zip(g.nodes(), g.nodes())) g = dgl.add_self_loop(g)
g = DGLGraph(g)
n_edges = g.number_of_edges() n_edges = g.number_of_edges()
# create DGI model # create DGI model
......
...@@ -14,6 +14,7 @@ Dependencies ...@@ -14,6 +14,7 @@ Dependencies
```bash ```bash
pip install tensorflow requests pip install tensorflow requests
DGLBACKEND=tensorflow
``` ```
How to run How to run
......
...@@ -15,8 +15,9 @@ import numpy as np ...@@ -15,8 +15,9 @@ import numpy as np
import networkx as nx import networkx as nx
import time import time
import tensorflow as tf import tensorflow as tf
from dgl import DGLGraph import dgl
from dgl.data import register_data_args, load_data from dgl.data import register_data_args
from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
from gat import GAT from gat import GAT
from utils import EarlyStopping from utils import EarlyStopping
...@@ -35,20 +36,28 @@ def evaluate(model, features, labels, mask): ...@@ -35,20 +36,28 @@ def evaluate(model, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
data = CoraGraphDataset()
elif args.dataset == 'citeseer':
data = CiteseerGraphDataset()
elif args.dataset == 'pubmed':
data = PubmedGraphDataset()
else:
raise ValueError('Unknown dataset: {}'.format(args.dataset))
g = data[0]
if args.gpu < 0: if args.gpu < 0:
device = "/cpu:0" device = "/cpu:0"
else: else:
device = "/gpu:{}".format(args.gpu) device = "/gpu:{}".format(args.gpu)
g = g.to(device)
with tf.device(device): with tf.device(device):
features = g.ndata['feat']
features = tf.convert_to_tensor(data.features, dtype=tf.float32) labels = g.ndata['label']
labels = tf.convert_to_tensor(data.labels, dtype=tf.int64) train_mask = g.ndata['train_mask']
train_mask = tf.convert_to_tensor(data.train_mask, dtype=tf.bool) val_mask = g.ndata['val_mask']
val_mask = tf.convert_to_tensor(data.val_mask, dtype=tf.bool) test_mask = g.ndata['test_mask']
test_mask = tf.convert_to_tensor(data.test_mask, dtype=tf.bool)
num_feats = features.shape[1] num_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -63,11 +72,8 @@ def main(args): ...@@ -63,11 +72,8 @@ def main(args):
val_mask.numpy().sum(), val_mask.numpy().sum(),
test_mask.numpy().sum())) test_mask.numpy().sum()))
g = data.graph g = dgl.remove_self_loop(g)
# add self loop g = dgl.add_self_loop(g)
g.remove_edges_from(nx.selfloop_edges(g))
g = DGLGraph(g).to(device)
g.add_edges(g.nodes(), g.nodes())
n_edges = g.number_of_edges() n_edges = g.number_of_edges()
# create model # create model
heads = ([args.num_heads] * args.num_layers) + [args.num_out_heads] heads = ([args.num_heads] * args.num_layers) + [args.num_out_heads]
......
...@@ -12,6 +12,7 @@ Dependencies ...@@ -12,6 +12,7 @@ Dependencies
``bash ``bash
pip install tensorflow requests pip install tensorflow requests
export DGLBACKEND=tensorflow
`` ``
Codes Codes
......
...@@ -4,9 +4,10 @@ import math ...@@ -4,9 +4,10 @@ import math
import numpy as np import numpy as np
import networkx as nx import networkx as nx
import tensorflow as tf import tensorflow as tf
from dgl import DGLGraph
import dgl.function as fn import dgl.function as fn
from dgl.data import register_data_args, load_data import dgl
from dgl.data import register_data_args
from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
from tensorflow.keras import layers from tensorflow.keras import layers
...@@ -94,19 +95,28 @@ def evaluate(model, features, labels, mask): ...@@ -94,19 +95,28 @@ def evaluate(model, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
data = CoraGraphDataset()
elif args.dataset == 'citeseer':
data = CiteseerGraphDataset()
elif args.dataset == 'pubmed':
data = PubmedGraphDataset()
else:
raise ValueError('Unknown dataset: {}'.format(args.dataset))
g = data[0]
if args.gpu < 0: if args.gpu < 0:
device = "/cpu:0" device = "/cpu:0"
else: else:
device = "/gpu:{}".format(args.gpu) device = "/gpu:{}".format(args.gpu)
g = g.to(device)
with tf.device(device): with tf.device(device):
features = tf.convert_to_tensor(data.features, dtype=tf.float32) features = g.ndata['feat']
labels = tf.convert_to_tensor(data.labels, dtype=tf.int64) labels = g.ndata['label']
train_mask = tf.convert_to_tensor(data.train_mask, dtype=tf.bool) train_mask = g.ndata['train_mask']
val_mask = tf.convert_to_tensor(data.val_mask, dtype=tf.bool) val_mask = g.ndata['val_mask']
test_mask = tf.convert_to_tensor(data.test_mask, dtype=tf.bool) test_mask = g.ndata['test_mask']
in_feats = features.shape[1] in_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -121,12 +131,9 @@ def main(args): ...@@ -121,12 +131,9 @@ def main(args):
val_mask.numpy().sum(), val_mask.numpy().sum(),
test_mask.numpy().sum())) test_mask.numpy().sum()))
# graph preprocess and calculate normalization factor # add self loop
g = data.graph g = dgl.remove_self_loop(g)
g.remove_edges_from(nx.selfloop_edges(g)) g = dgl.add_self_loop(g)
g = DGLGraph(g)
# # add self loop
g.add_edges(g.nodes(), g.nodes())
n_edges = g.number_of_edges() n_edges = g.number_of_edges()
# # normalization # # normalization
degs = tf.cast(tf.identity(g.in_degrees()), dtype=tf.float32) degs = tf.cast(tf.identity(g.in_degrees()), dtype=tf.float32)
......
...@@ -4,9 +4,9 @@ import math ...@@ -4,9 +4,9 @@ import math
import numpy as np import numpy as np
import networkx as nx import networkx as nx
import tensorflow as tf import tensorflow as tf
from dgl import DGLGraph import dgl
import dgl.function as fn from dgl.data import register_data_args
from dgl.data import register_data_args, load_data from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
from tensorflow.keras import layers from tensorflow.keras import layers
def gcn_msg(edge): def gcn_msg(edge):
...@@ -100,19 +100,28 @@ def evaluate(model, features, labels, mask): ...@@ -100,19 +100,28 @@ def evaluate(model, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
data = CoraGraphDataset()
elif args.dataset == 'citeseer':
data = CiteseerGraphDataset()
elif args.dataset == 'pubmed':
data = PubmedGraphDataset()
else:
raise ValueError('Unknown dataset: {}'.format(args.dataset))
g = data[0]
if args.gpu < 0: if args.gpu < 0:
device = "/cpu:0" device = "/cpu:0"
else: else:
device = "/gpu:{}".format(args.gpu) device = "/gpu:{}".format(args.gpu)
g = g.to(device)
with tf.device(device): with tf.device(device):
features = tf.convert_to_tensor(data.features, dtype=tf.float32) features = g.ndata['feat']
labels = tf.convert_to_tensor(data.labels, dtype=tf.int64) labels = g.ndata['label']
train_mask = tf.convert_to_tensor(data.train_mask, dtype=tf.bool) train_mask = g.ndata['train_mask']
val_mask = tf.convert_to_tensor(data.val_mask, dtype=tf.bool) val_mask = g.ndata['val_mask']
test_mask = tf.convert_to_tensor(data.test_mask, dtype=tf.bool) test_mask = g.ndata['test_mask']
in_feats = features.shape[1] in_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -127,12 +136,11 @@ def main(args): ...@@ -127,12 +136,11 @@ def main(args):
val_mask.numpy().sum(), val_mask.numpy().sum(),
test_mask.numpy().sum())) test_mask.numpy().sum()))
# graph preprocess and calculate normalization factor # add self loop
g = data.graph if args.self_loop:
g.remove_edges_from(nx.selfloop_edges(g)) g = dgl.remove_self_loop(g)
g = DGLGraph(g) g = dgl.add_self_loop(g)
# # add self loop n_edges = g.number_of_edges()
g.add_edges(g.nodes(), g.nodes())
n_edges = g.number_of_edges() n_edges = g.number_of_edges()
# # normalization # # normalization
degs = tf.cast(tf.identity(g.in_degrees()), dtype=tf.float32) degs = tf.cast(tf.identity(g.in_degrees()), dtype=tf.float32)
...@@ -203,6 +211,8 @@ if __name__ == '__main__': ...@@ -203,6 +211,8 @@ if __name__ == '__main__':
help="number of hidden gcn layers") help="number of hidden gcn layers")
parser.add_argument("--weight-decay", type=float, default=5e-4, parser.add_argument("--weight-decay", type=float, default=5e-4,
help="Weight for L2 loss") help="Weight for L2 loss")
parser.add_argument("--self-loop", action='store_true',
help="graph self-loop (default=False)")
args = parser.parse_args() args = parser.parse_args()
print(args) print(args)
......
...@@ -3,8 +3,9 @@ import time ...@@ -3,8 +3,9 @@ import time
import numpy as np import numpy as np
import networkx as nx import networkx as nx
import tensorflow as tf import tensorflow as tf
from dgl import DGLGraph import dgl
from dgl.data import register_data_args, load_data from dgl.data import register_data_args
from dgl.data import CoraGraphDataset, CiteseerGraphDataset, PubmedGraphDataset
from gcn import GCN from gcn import GCN
...@@ -19,19 +20,28 @@ def evaluate(model, features, labels, mask): ...@@ -19,19 +20,28 @@ def evaluate(model, features, labels, mask):
def main(args): def main(args):
# load and preprocess dataset # load and preprocess dataset
data = load_data(args) if args.dataset == 'cora':
data = CoraGraphDataset()
elif args.dataset == 'citeseer':
data = CiteseerGraphDataset()
elif args.dataset == 'pubmed':
data = PubmedGraphDataset()
else:
raise ValueError('Unknown dataset: {}'.format(args.dataset))
g = data[0]
if args.gpu < 0: if args.gpu < 0:
device = "/cpu:0" device = "/cpu:0"
else: else:
device = "/gpu:{}".format(args.gpu) device = "/gpu:{}".format(args.gpu)
g = g.to(device)
with tf.device(device): with tf.device(device):
features = tf.convert_to_tensor(data.features, dtype=tf.float32) features = g.ndata['feat']
labels = tf.convert_to_tensor(data.labels, dtype=tf.int64) labels = g.ndata['label']
train_mask = tf.convert_to_tensor(data.train_mask, dtype=tf.bool) train_mask = g.ndata['train_mask']
val_mask = tf.convert_to_tensor(data.val_mask, dtype=tf.bool) val_mask = g.ndata['val_mask']
test_mask = tf.convert_to_tensor(data.test_mask, dtype=tf.bool) test_mask = g.ndata['test_mask']
in_feats = features.shape[1] in_feats = features.shape[1]
n_classes = data.num_labels n_classes = data.num_labels
n_edges = data.graph.number_of_edges() n_edges = data.graph.number_of_edges()
...@@ -46,12 +56,10 @@ def main(args): ...@@ -46,12 +56,10 @@ def main(args):
val_mask.numpy().sum(), val_mask.numpy().sum(),
test_mask.numpy().sum())) test_mask.numpy().sum()))
# graph preprocess and calculate normalization factor # add self loop
g = data.graph
if args.self_loop: if args.self_loop:
g.remove_edges_from(nx.selfloop_edges(g)) g = dgl.remove_self_loop(g)
g.add_edges_from(zip(g.nodes(), g.nodes())) g = dgl.add_self_loop(g)
g = DGLGraph(g).to(device)
n_edges = g.number_of_edges() n_edges = g.number_of_edges()
# normalization # normalization
degs = tf.cast(tf.identity(g.in_degrees()), dtype=tf.float32) degs = tf.cast(tf.identity(g.in_degrees()), dtype=tf.float32)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment