From 5bf82a572465126a7b8feea49a38e2c97a85b74b Mon Sep 17 00:00:00 2001 From: EdisonLeeeee Date: Thu, 20 Aug 2020 10:44:45 -0400 Subject: [PATCH] do_forward -> train_step and test_step;fix some typos --- README.md | 27 +++++--- graphgallery/__init__.py | 2 +- graphgallery/nn/models/basemodel.py | 23 ++++--- .../nn/models/semisupervised/sbvat.py | 19 +----- .../semisupervised/semi_supervised_model.py | 64 ++++++++++++------ graphgallery/nn/models/semisupervised/sgc.py | 13 +++- imgs/visualization_acc.png | Bin 18313 -> 13564 bytes imgs/visualization_loss.png | Bin 16244 -> 11819 bytes 8 files changed, 89 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index 7e8bf25d..c43255b9 100755 --- a/README.md +++ b/README.md @@ -109,25 +109,32 @@ Otherwise you can also use `model.show('model')` or `model.show('train')` to sho NOTE: you should install texttable first. ## Visualization +NOTE: you must install [SciencePlots](https://github.com/garrettj403/SciencePlots) package for a better preview. + Accuracy ```python import matplotlib.pyplot as plt -plt.plot(his.history['acc']) -plt.plot(his.history['val_acc']) -plt.legend(['Accuracy', 'Val Accuracy']) -plt.xlabel('Epochs') -plt.show() +with plt.style.context(['science', 'no-latex']): + plt.plot(his.history['acc']) + plt.plot(his.history['val_acc']) + plt.legend(['Train Accuracy', 'Val Accuracy']) + plt.ylabel('Accuracy') + plt.xlabel('Epochs') + plt.autoscale(tight=True) + plt.show() ``` ![visualization](https://github.com/EdisonLeeeee/GraphGallery/blob/master/imgs/visualization_acc.png) + Loss ```python import matplotlib.pyplot as plt -plt.plot(his.history['loss']) -plt.plot(his.history['val_loss']) -plt.legend(['Loss', 'Val Loss']) -plt.xlabel('Epochs') -plt.show() +with plt.style.context(['science', 'no-latex']): + plt.plot(his.history['loss']) + plt.plot(his.history['val_loss']) + plt.legend(['Train Loss', 'Val Loss']) + plt.ylabel('Loss') + plt.xlabel('Epochs') + plt.autoscale(tight=True) + plt.show() ``` ![visualization](https://github.com/EdisonLeeeee/GraphGallery/blob/master/imgs/visualization_loss.png) diff --git a/graphgallery/__init__.py b/graphgallery/__init__.py index e803f73d..cbff300a 100755 --- a/graphgallery/__init__.py +++ b/graphgallery/__init__.py @@ -23,6 +23,6 @@ from graphgallery import data -__version__ = '0.1.9' +__version__ = '0.1.10' __all__ = ['graphgallery', 'nn', 'utils', 'sequence', 'data', '__version__'] diff --git a/graphgallery/nn/models/basemodel.py b/graphgallery/nn/models/basemodel.py index 0b75d837..0fcbd4da 100755 --- a/graphgallery/nn/models/basemodel.py +++ b/graphgallery/nn/models/basemodel.py @@ -2,6 +2,7 @@ import random import logging +import os.path as osp import numpy as np import tensorflow as tf import scipy.sparse as sp @@ -9,6 +10,8 @@ from graphgallery import config, check_and_convert, asintarr, Bunch from graphgallery.utils.type_check import is_list_like from graphgallery.utils.misc import print_table +from graphgallery.data.utils import makedirs + class BaseModel: @@ -97,8 +100,8 @@ def __init__(self, adj, x, labels=None, device="CPU:0", seed=None, name=None, ** self.__sparse = is_adj_sparse # log path - self.weight_dir = "/tmp/weight" - self.weight_path = f"{self.weight_dir}/{name}_weights" + self.weight_dir = osp.expanduser(osp.normpath("/tmp/weight")) + self.weight_path = osp.join(self.weight_dir, f"{name}_weights") # data types, default: `float32` and `int64` self.floatx = config.floatx() @@ -170,12 +173,8 @@ def _check_inputs(self, adj, x): raise RuntimeError(f"The adjacency matrix should be N by N square matrix.") return adj, x - @property - def model(self): - return self.__model - - ################### TODO: This may cause ERROR ############# def __getattr__(self, attr): + ################### TODO: This may cause ERROR ############# try: return self.__dict__[attr] except KeyError: @@ -183,7 +182,10 @@ def __getattr__(self, attr): return getattr(self.model, attr) raise AttributeError(f"'{self.name}' and '{self.name}.model' objects have no attribute '{attr}'") - + @property + def model(self): + return self.__model + @model.setter def model(self, m): # Back up @@ -194,8 +196,8 @@ def model(self, m): def save(self, path=None, as_model=False): - if not os.path.exists(self.weight_dir): - os.makedirs(self.weight_dir) + if not osp.exists(self.weight_dir): + makedirs(self.weight_dir) logging.log(logging.WARNING, f"Make Directory in {self.weight_dir}") if path is None: @@ -216,6 +218,7 @@ def save(self, path=None, as_model=False): def load(self, path=None, as_model=False): if not path: path = self.weight_path + if not path.endswith('.h5'): path += '.h5' if as_model: diff --git a/graphgallery/nn/models/semisupervised/sbvat.py b/graphgallery/nn/models/semisupervised/sbvat.py index a404feef..709d0b36 100755 --- a/graphgallery/nn/models/semisupervised/sbvat.py +++ b/graphgallery/nn/models/semisupervised/sbvat.py @@ -128,13 +128,6 @@ def build(self, hiddens=[16], activations=['relu'], dropouts=[0.5], self.epsilon = epsilon # Norm length for (virtual) adversarial training self.n_power_iterations = n_power_iterations # Number of power iterations - # def propagation(self, x, adj, training=True): - # h = x - # for layer in self.GCN_layers: - # h = self.dropout_layer(h, training=training) - # h = layer([h, adj]) - # return h - def propagation(self, x, adj, training=True): h = x for dropout_layer, GCN_layer in zip(self.dropout_layers, self.GCN_layers[:-1]): @@ -145,7 +138,7 @@ def propagation(self, x, adj, training=True): return h @tf.function - def do_train_forward(self, sequence): + def train_step(self, sequence): with tf.device(self.device): self.train_metric.reset_states() @@ -171,7 +164,7 @@ def do_train_forward(self, sequence): return loss, self.train_metric.result() @tf.function - def do_test_forward(self, sequence): + def test_step(self, sequence): with tf.device(self.device): self.test_metric.reset_states() @@ -186,14 +179,6 @@ def do_test_forward(self, sequence): return loss, self.test_metric.result() - def do_forward(self, sequence, training=True): - if training: - loss, accuracy = self.do_train_forward(sequence) - else: - loss, accuracy = self.do_test_forward(sequence) - - return loss.numpy(), accuracy.numpy() - def virtual_adversarial_loss(self, x, adj, logit, adv_mask): d = tf.random.normal(shape=tf.shape(x), dtype=self.floatx) diff --git a/graphgallery/nn/models/semisupervised/semi_supervised_model.py b/graphgallery/nn/models/semisupervised/semi_supervised_model.py index 5ac85aa8..7b2ba193 100755 --- a/graphgallery/nn/models/semisupervised/semi_supervised_model.py +++ b/graphgallery/nn/models/semisupervised/semi_supervised_model.py @@ -220,7 +220,7 @@ def train_v1(self, idx_train, idx_val=None, if self.do_before_train: self.do_before_train() - loss, accuracy = self.do_forward(train_data) + loss, accuracy = self.train_step(train_data) train_data.on_epoch_end() history.add_results(loss, 'loss') @@ -230,7 +230,7 @@ def train_v1(self, idx_train, idx_val=None, if self.do_before_validation: self.do_before_validation() - val_loss, val_accuracy = self.do_forward(val_data, training=False) + val_loss, val_accuracy = self.test_step(val_data) history.add_results(val_loss, 'val_loss') history.add_results(val_accuracy, 'val_acc') @@ -409,7 +409,7 @@ def train(self, idx_train, idx_val=None, self.do_before_train() callbacks.on_train_batch_begin(0) - loss, accuracy = self.do_forward(train_data) + loss, accuracy = self.train_step(train_data) train_data.on_epoch_end() training_logs = {'loss': loss, 'acc': accuracy} @@ -419,7 +419,7 @@ def train(self, idx_train, idx_val=None, if self.do_before_validation: self.do_before_validation() - val_loss, val_accuracy = self.do_forward(val_data, training=False) + val_loss, val_accuracy = self.test_step(val_data) training_logs.update({'val_loss': val_loss, 'val_acc': val_accuracy}) callbacks.on_epoch_end(epoch, training_logs) @@ -584,7 +584,7 @@ def train_v2(self, idx_train, idx_val=None, self.do_before_train() callbacks.on_train_batch_begin(0) - loss, accuracy = self.do_forward(train_data) + loss, accuracy = self.train_step(train_data) train_data.on_epoch_end() training_logs = {'loss': loss, 'acc': accuracy} @@ -594,7 +594,7 @@ def train_v2(self, idx_train, idx_val=None, if self.do_before_validation: self.do_before_validation() - val_loss, val_accuracy = self.do_forward(val_data, training=False) + val_loss, val_accuracy = self.test_step(val_data) training_logs.update({'val_loss': val_loss, 'val_acc': val_accuracy}) callbacks.on_epoch_end(epoch, training_logs) @@ -650,16 +650,15 @@ def test(self, index, **kwargs): if self.do_before_test: self.do_before_test(**kwargs) - loss, accuracy = self.do_forward(test_data, training=False) + loss, accuracy = self.test_step(test_data) return loss, accuracy - def do_forward(self, sequence, training=True): + def train_step(self, sequence): """ Forward propagation for the input `sequence`. This method will be called - in `train` and `test`, you can rewrite it for you customized training/testing - process. If you want to specify your customized data during traing/testing/predicting, - you can implement a sub-class of `graphgallery.NodeSequence`, wich is iterable + in `train`. If you want to specify your customized data during traing/testing/predicting, + you can implement a subclass of `graphgallery.NodeSequence`, wich is iterable and yields `inputs` and `labels` in each iteration. @@ -672,8 +671,6 @@ def do_forward(self, sequence, training=True): ---------- sequence: `graphgallery.NodeSequence` The input `sequence`. - trainng (Boolean, optional): - Indicating training or test procedure. (default: :obj:`True`) Return: ---------- @@ -684,20 +681,49 @@ def do_forward(self, sequence, training=True): """ model = self.model + model.reset_metrics() - if training: - forward_fn = model.train_on_batch - else: - forward_fn = model.test_on_batch + with tf.device(self.device): + for inputs, labels in sequence: + loss, accuracy = model.train_on_batch(x=inputs, y=labels, reset_metrics=False) + + return loss, accuracy + + def test_step(self, sequence): + """ + Forward propagation for the input `sequence`. This method will be called + in `test`. If you want to specify your customized data during traing/testing/predicting, + you can implement a subclass of `graphgallery.NodeSequence`, wich is iterable + and yields `inputs` and `labels` in each iteration. + + + Note: + ---------- + You must compile your model before training/testing/predicting. + Use `model.build()`. + Arguments: + ---------- + sequence: `graphgallery.NodeSequence` + The input `sequence`. + + Return: + ---------- + loss: Float scalar + Output loss of forward propagation. + accuracy: Float scalar + Output accuracy of prediction. + + """ + model = self.model model.reset_metrics() with tf.device(self.device): for inputs, labels in sequence: - loss, accuracy = forward_fn(x=inputs, y=labels, reset_metrics=False) + loss, accuracy = model.test_on_batch(x=inputs, y=labels, reset_metrics=False) return loss, accuracy - + def predict(self, index, **kwargs): """ Predict the output probability for the `index` of nodes. diff --git a/graphgallery/nn/models/semisupervised/sgc.py b/graphgallery/nn/models/semisupervised/sgc.py index 16b00f76..88c535a6 100755 --- a/graphgallery/nn/models/semisupervised/sgc.py +++ b/graphgallery/nn/models/semisupervised/sgc.py @@ -70,10 +70,19 @@ def preprocess(self, adj, x): if self.norm_x: x = normalize_x(x, norm=self.norm_x) -# InvalidArgumentError: Cannot use GPU when output.shape[1] * nnz(a) > 2^31 [Op:SparseTensorDenseMatMul] - with tf.device(self.device): + + # To avoid this tensorflow error in large dataset: + # InvalidArgumentError: Cannot use GPU when output.shape[1] * nnz(a) > 2^31 [Op:SparseTensorDenseMatMul] + if self.n_features*adj.nnz>2**31: + device = "CPU" + else: + device = self.device + + with tf.device(device): x, adj = astensors([x, adj]) x = SGConvolution(order=self.order)([x, adj]) + + with tf.device(self.device): self.x_norm, self.adj_norm = x, adj def build(self, lr=0.2, l2_norms=[5e-5], use_bias=True): diff --git a/imgs/visualization_acc.png b/imgs/visualization_acc.png index caa50cbaed59f82498529debe8478d595678149e..aff054b0a4279fa021cbbaaa2e7ce31ad28a6737 100755 GIT binary patch literal 13564 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 literal 18313 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�|utcV&rhcsR*4HOGm@0XRg%Va= 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%0A<5GC_Y6L9IKACWPDIV|dFI3yv1+8H#4y5GF z%jK1n4aJt#rlXe_c;5?z{Pg*n{82Xkb;tHz0x9bw?Z3A)%mOkE4pH1(T#kUpotc{} zY;ML!#2^EVyi8Rm1N}jxnKP@e$OI8ib6>$;VE~(xA_>{~K_rt?y*5|xxVC2Z^*x%= zxeR6H8JW^Ht+Cve2FdXEnM$y|ZM2WKN44qPHu#D=B2k|^bWzq2A zR{zNk>26a2r}dfby+p*s+dD(aKSoBNRXVkfVCcTTnm0NX(sjXy!UVqiW*;>2YwJfM z)hVcAKA=(@#|W7H&Hr-aomd1Hv0f6egy!WLDMpu4Q};n} zFCrFA&niF3jh0l6G|@=g%L28-EdJ!Z`L%G&gZs<;zLUuQ@xKy`-dqT)hASJw%$eMY z?Pc$>%E~OE`ZZ4r?OvQRF@!-tfl^gnz4Fl%TS86!+=L2m_h&{3 zx6NGOsQ>kK-?F~V6?EiK);)L6(Yi(@x zYOEtHD_46sk_SLCXxF{fNg5a>la8hrL4Y=?&ZNEgB z@fxv_DzwpkMplfNAIfE8bvbT7!xhc(4Sbf#!VT?2bP;A2 zCKWuJd*$%~_7_e!)OX@91E2?Sym#Za*Sft@ua_!JzAoqTP zI7d(Za7MCz*$O+`V@m~&4KoryN_C$h=dU;ebIWl z=ryfPpw1A+skwu7pf=5pU=X=rmwgIgre_}iwXwm3LDHES{z)FqCMBp<|5wtV0ZYt# zLU254iHZ;se`L28X_`-}DvBkr?#fQkOX2e$j5W4ror>2k8(p_a#l0!sU^NH4miCRa zBamrNTIP%+*ZS}HTb>FDKj3W{=_=rZV-@!%i6MTha_t6!97R>#`$plz9!0RRlBPr_ zwlCzYdZ*kM;^RruVhuD`K^a7SnkAqt$J_eg1aFA1L(%dL*LJ0IXkcLCc;}1f5eOX=)O(OT>clLxpT)YaT55I|IHfn=NhY z7o-oc>~zO>_)r1YeM}M(5@QDk3=a>Fl{OF6?0(IY(Ap5P1*Q!-UxapBHvnsqNq6`> zRS5R69eO(**qLx}aGtfA>(lkYsS-u@55u@l_^M4fU_8DEU+C4<#3~gShCnPi(N?T? z__gV&%dwDXNMD=v-J;%s(zvp^DlK|_IQ!C9#OV2C5cn%+U`FtJ_5%EfG#of{yMMaU zF!;&s^qLaq10FY+k|1eN2^Dqtv9(bN-dusWpBJVqy2z%-uXu!nNJ0?MOe;MV5X$du z)B~~Gh-!2|)noH33wvW<~yj}L3H`T>fT_`T5R?6f;wj9e20-dkuZo-1J zl18S5$Yi`E#XY(1sZ;KO7lYbc@qVlSB^*5bW_J*5U1MX4`J|TM?oocc;6YgIUuk=X zKJPFzbaWYjp8s52n0)*giN~m&Ut0PFV;>AMbs2V!2ig}Ho}las@=M4FK; zPlh4zN5AEBV#GVIi%UW$ z?S*dm4~yEO1ZF#yW#X^9MW(8tKzuK2ey!;5}-2= z@yxPhM(YYU3l3LVV{MtdS+Xy!irG^Z8Whinz{8gnn-JQ1_r|M#}Imb_j1AicU0fDEsC=4VUcBJQOsWLA+~#ODxW8_Xat=e z&5i3Fx99TV*22>qd=dhvw(+?caoD+godXSNB`sNok;s0d8~;x9o{Rq4s}6NFZ5r;E z9)L=la@SQza-9{}QvQI(lj9YPsj8`T-5_y19JC-<#M?r`1LN)9bDni2XkNUN()>?} zAhrpr@S(TUE}~@Hm_gpSUYBiBeISUj0_mcXxX`ks7G+k&?c^)eAja|72-%0V1G6J7 zx2JZJ!Hy^m2sNHUh8=c*0mP-TDqT`I`#Om?N_pjApPKoDwW>Gj9cx13HBk?7Ed}7( zdu}+XC5$+kkga|D&_O9)!lbhmxr1B9zmLVl(5!y72Un1=VeOnNwOxGj z{8?k(5RXnWfceA-sI*>MQ;z?FK%OhJrxwbsu8rbrDaa*?qB`>*9=)Jep4FG~i$56N z1PluHeWGQOZc5556e|6vzu7=KPf=b|#XiPbh5N9AuPcQzFA5wP@bQC1oU|Gmwc7N3 zKitwx3Txo_(TVSBizRYLdLXjGs3(i?4<}a%kB8i3=J;kU4OlxZqg^rseSH+KU&CNw zVHMhG{6hr|TK#J<)Pl;lRq&bH`+}b-ck4x12?81nGtGIbGW&B?6PiazUi|1cVZUys z)=L)$OQA>fm1yOR3>&-FPu|O=m*4tQ9#iRSvGa?BK({o6`t*CjwGsxEm1sGv>la`i zJ$Z!=AL{E8mz$;#*A9K%=LEM`pn|f}%KlAYI9>P$5$E5PZlHhHA78f>=4$AWb@Vzo zS#3Bkqz7#L72Hct+COv)#r&BoOuW0h>*(kxW@=i<_ozG3(ah{@mhVGf z6wdPq2qa`66@&qTZf9qQYvI&@aYG)~iY!G8*p%c4_V)7QqYw3eiY7n+13sC5w>GEm zsizU-a}c)R&howIj`|ig3!qjOgVsoYUM?;vZEfw4hu>=*pMH&`DV{`$B*~D>zKQAJXYH zR|1r#NS^IpW6pyuS^PRkltpjsVS29le6ZGmQyOv3+?k&Bn_sTc(mz=W%KX z`m6d$uGU|gQu<0K4V?qmzsGvIdU`!8DMIzCoT6e#RTbmU(b4lEy1e|>R+H_vVq5|O zvz;G_b|e zDKa`b?c?Jk5F%w_iKNlVMU;>z%@1cP%mJK_>E|)&h5PDrZ4cDPw{PDTmzT@E86(Xb zrxPNJPf1I|kvJS%TDIb7kEuEhSk)MV2)KCXIs2OK0nz=JTRywe04o(R+~97RRN zq?{aOqzXlA@KR=L=;u#r5fPCc0ATvo*Yl9VBnk@(#I3EZktor|%c$`P2yn>aWkV%Q zI!>k>f8Y3uuyb)y!^6WDmzIX#+}$MuIZI*myAMG{D~-MVAPQ}9S=lxa&|G6(IDG^sxd}(50^1Lgw z%9)|O4r_A#-#OXXy6^v8n3$Wx2@4CCS62284ar-Nt+vU%?Nz7(bgx-oB-YKZG^6~& zLXA^y{71o^-L`Qr_S0UqG2XDFcBdk1?R<6nlunh+1NaJE-yZ>Kh&N=WB|B?l$X={p7#^bv#^AVQ9!zn|8a70g%%W0 zzBe#<0ilwO1J0U4t?V{n1?%nWg9A!rLUQsm%l^f%;|=%TZ-e4DCOJ7diAhPpKvD%l zDisjzq2Xv|Ok@&BB6r7}fJDY~*&D;NBL^w;_hcCnvhdA;92lCY$(F&D0LRXAjsoQv zi0K=EG&%eGcK{5Agt2JlZL23hicd;D5~wq3bwvhgqT%!#u=|eN185+SLNH%PE9;M~ z3bH?7J{Wtxe8j| z5N2lG32p>b{G0u%)Kee-9|mFJj-d+Mie_ocM~5;2U=Ra#A`Vgn8jDMmyTr|NPu)7> z7sn?jn_FAKmgBiE%G<1OZ*IDKdR{!-UO_(*xVdbD+jz~!h8Y(Z=jiI%2V75(nOJC! zkQaxoogJ``MMOuVK)Oqnvy9EmU=a}!V_tEFXJ9Pmvah;?SQFdwyqggm0iH-H85wK| zBz7Ji{3{Aj0`kfuX8sRHfjQt6&B4ZoCbXUp_xJZxGc(6J@{u_2jgd;ot$I!Y%LS$c z(j+kCTw%U>^CoGc?7?#)SLGxHu!@FV{;S4<@q?0DTDVHe%Icb$um%PO06L3lYT^I| z{5hn6^$Zl_guFZqW@ct!U7)9@kBkGMfo^1E1ezKIGFPn^l9@^5dojvO$md9rl9B=} zagM0uA|yacM>EaWk6*(M2z?YTu4#fUKjw6kpv!U%|C*`LOy_r@1*VwI<71{Jl_*5z zh4_int|yk;+N>;MNcZY0X<}j`B=G;q?h~~}qPFXuq++WsHb7!e9>hZlEA*;+K6_G9 zl1%L%t)of(E%(a8LYUQ7H=G9%#|<&{X%%&KEHIJfgMb1W7A%CvVJ!ymf%m{%1zd>O z%HnNK+cMA8Ibba|9QhVH{d|gCANwKkm!3s?(gn=q%cP}r>a{1~n6?FSNAt3<* z%z>qn1^R&f(*%*EqZ^$>`HZPJLZ9O);R!amN7q}HVP^{%yCL$@DpFr0jD!CNahKJo literal 16244 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