Browse Source

Use get_iters function instead of tqdm in StructuralSP.

v0.2.x
jajupmochi 4 years ago
parent
commit
349d7a76ca
2 changed files with 16 additions and 28 deletions
  1. +1
    -1
      gklearn/kernels/graph_kernel.py
  2. +15
    -27
      gklearn/kernels/structural_sp.py

+ 1
- 1
gklearn/kernels/graph_kernel.py View File

@@ -37,7 +37,7 @@ class GraphKernel(object):
elif len(graphs[0]) == 0: elif len(graphs[0]) == 0:
raise Exception('The graph list given is empty. No computation was performed.') raise Exception('The graph list given is empty. No computation was performed.')
else: else:
self._graphs = [g.copy() for g in graphs[0]]
self._graphs = [g.copy() for g in graphs[0]] # @todo: might be very slow.
self._gram_matrix = self._compute_gram_matrix() self._gram_matrix = self._compute_gram_matrix()
self._gram_matrix_unnorm = np.copy(self._gram_matrix) self._gram_matrix_unnorm = np.copy(self._gram_matrix)
if self._normalize: if self._normalize:


+ 15
- 27
gklearn/kernels/structural_sp.py View File

@@ -14,7 +14,7 @@ import sys
from itertools import product from itertools import product
# from functools import partial # from functools import partial
from multiprocessing import Pool from multiprocessing import Pool
from tqdm import tqdm
from gklearn.utils import get_iters
# import networkx as nx # import networkx as nx
import numpy as np import numpy as np
from gklearn.utils.parallel import parallel_gm, parallel_me from gklearn.utils.parallel import parallel_gm, parallel_me
@@ -41,10 +41,7 @@ class StructuralSP(GraphKernel):
def _compute_gm_series(self): def _compute_gm_series(self):
# get shortest paths of each graph in the graphs. # get shortest paths of each graph in the graphs.
splist = [] splist = []
if self._verbose >= 2:
iterator = tqdm(self._graphs, desc='getting sp graphs', file=sys.stdout)
else:
iterator = self._graphs
iterator = get_iters(self._graphs, desc='getting sp graphs', file=sys.stdout, verbose=(self._verbose >= 2))
if self._compute_method == 'trie': if self._compute_method == 'trie':
for g in iterator: for g in iterator:
splist.append(self._get_sps_as_trie(g)) splist.append(self._get_sps_as_trie(g))
@@ -57,10 +54,9 @@ class StructuralSP(GraphKernel):


from itertools import combinations_with_replacement from itertools import combinations_with_replacement
itr = combinations_with_replacement(range(0, len(self._graphs)), 2) itr = combinations_with_replacement(range(0, len(self._graphs)), 2)
if self._verbose >= 2:
iterator = tqdm(itr, desc='Computing kernels', file=sys.stdout)
else:
iterator = itr
len_itr = int(len(self._graphs) * (len(self._graphs) + 1) / 2)
iterator = get_iters(itr, desc='Computing kernels', file=sys.stdout,
length=len_itr, verbose=(self._verbose >= 2))
if self._compute_method == 'trie': if self._compute_method == 'trie':
for i, j in iterator: for i, j in iterator:
kernel = self._ssp_do_trie(self._graphs[i], self._graphs[j], splist[i], splist[j]) kernel = self._ssp_do_trie(self._graphs[i], self._graphs[j], splist[i], splist[j])
@@ -91,11 +87,9 @@ class StructuralSP(GraphKernel):
get_sps_fun = self._wrapper_get_sps_trie get_sps_fun = self._wrapper_get_sps_trie
else: else:
get_sps_fun = self._wrapper_get_sps_naive get_sps_fun = self._wrapper_get_sps_naive
if self.verbose >= 2:
iterator = tqdm(pool.imap_unordered(get_sps_fun, itr, chunksize),
desc='getting shortest paths', file=sys.stdout)
else:
iterator = pool.imap_unordered(get_sps_fun, itr, chunksize)
iterator = get_iters(pool.imap_unordered(get_sps_fun, itr, chunksize),
desc='getting shortest paths', file=sys.stdout,
length=len(self._graphs), verbose=(self._verbose >= 2))
for i, sp in iterator: for i, sp in iterator:
splist[i] = sp splist[i] = sp
pool.close() pool.close()
@@ -122,10 +116,8 @@ class StructuralSP(GraphKernel):
# get shortest paths of g1 and each graph in g_list. # get shortest paths of g1 and each graph in g_list.
sp1 = get_shortest_paths(g1, self._edge_weight, self._ds_infos['directed']) sp1 = get_shortest_paths(g1, self._edge_weight, self._ds_infos['directed'])
splist = [] splist = []
if self._verbose >= 2:
iterator = tqdm(g_list, desc='getting sp graphs', file=sys.stdout)
else:
iterator = g_list
iterator = get_iters(g_list, desc='getting sp graphs', file=sys.stdout,
verbose=(self._verbose >= 2))
if self._compute_method == 'trie': if self._compute_method == 'trie':
for g in iterator: for g in iterator:
splist.append(self._get_sps_as_trie(g)) splist.append(self._get_sps_as_trie(g))
@@ -135,10 +127,8 @@ class StructuralSP(GraphKernel):


# compute kernel list. # compute kernel list.
kernel_list = [None] * len(g_list) kernel_list = [None] * len(g_list)
if self._verbose >= 2:
iterator = tqdm(range(len(g_list)), desc='Computing kernels', file=sys.stdout)
else:
iterator = range(len(g_list))
iterator = get_iters(range(len(g_list)), desc='Computing kernels',
file=sys.stdout, length=len(g_list), verbose=(self._verbose >= 2))
if self._compute_method == 'trie': if self._compute_method == 'trie':
for i in iterator: for i in iterator:
kernel = self._ssp_do_trie(g1, g_list[i], sp1, splist[i]) kernel = self._ssp_do_trie(g1, g_list[i], sp1, splist[i])
@@ -166,11 +156,9 @@ class StructuralSP(GraphKernel):
get_sps_fun = self._wrapper_get_sps_trie get_sps_fun = self._wrapper_get_sps_trie
else: else:
get_sps_fun = self._wrapper_get_sps_naive get_sps_fun = self._wrapper_get_sps_naive
if self.verbose >= 2:
iterator = tqdm(pool.imap_unordered(get_sps_fun, itr, chunksize),
desc='getting shortest paths', file=sys.stdout)
else:
iterator = pool.imap_unordered(get_sps_fun, itr, chunksize)
iterator = get_iters(pool.imap_unordered(get_sps_fun, itr, chunksize),
desc='getting shortest paths', file=sys.stdout,
length=len(g_list), verbose=(self._verbose >= 2))
for i, sp in iterator: for i, sp in iterator:
splist[i] = sp splist[i] = sp
pool.close() pool.close()


Loading…
Cancel
Save