def __init__(self, task_parameters): # parameters vocab_size = task_parameters['Voc'] nb_of_clust = task_parameters['nb_clusters_target'] clust_size_min = task_parameters['size_min'] clust_size_max = task_parameters['size_max'] p = task_parameters['p'] q = task_parameters['q'] self_loop = True # block model W, c = block.unbalanced_block_model(nb_of_clust, clust_size_min, clust_size_max, p, q) # add self loop if self_loop: for i in range(W.shape[0]): W[i, i] = 1 # shuffle W, c, idx = block.schuffle(W, c) # signal on block model u = np.zeros(c.shape[0]) for r in range(nb_of_clust): cluster = np.where(c == r)[0] s = cluster[np.random.randint(cluster.shape[0])] u[s] = r + 1 # target target = c # convert to pytorch u = torch.from_numpy(u) u = u.long() target = torch.from_numpy(target) target = target.long() # mapping matrices W_coo = sp.coo_matrix(W) nb_edges = W_coo.nnz nb_vertices = W.shape[0] edge_to_starting_vertex = sp.coo_matrix( (np.ones(nb_edges), (np.arange(nb_edges), W_coo.row)), shape=(nb_edges, nb_vertices)) edge_to_ending_vertex = sp.coo_matrix( (np.ones(nb_edges), (np.arange(nb_edges), W_coo.col)), shape=(nb_edges, nb_vertices)) # attribute #self.adj_matrix=torch.from_numpy(W).type(default_type) #self.edge_to_starting_vertex=torch.from_numpy(edge_to_starting_vertex.toarray()).type(default_type) #self.edge_to_ending_vertex=torch.from_numpy(edge_to_ending_vertex.toarray()).type(default_type) self.adj_matrix = W self.edge_to_starting_vertex = edge_to_starting_vertex self.edge_to_ending_vertex = edge_to_ending_vertex self.signal = u self.target = target
def __init__(self, task_parameters): # parameters vocab_size = task_parameters['Voc'] nb_of_clust = task_parameters['nb_clusters_target'] clust_size_min = task_parameters['size_min'] clust_size_max = task_parameters['size_max'] p = task_parameters['p'] q = task_parameters['q'] self_loop = True W0 = task_parameters['W0'] u0 = task_parameters['u0'] # create block model graph and put random signal on it W, c = block.unbalanced_block_model(nb_of_clust, clust_size_min, clust_size_max, p, q) u = np.random.randint(vocab_size, size=W.shape[0]) # len(c)=n (1-dim) # add the subgraph to be detected W, c = block.add_a_block(W0, W, c, nb_of_clust, q) u = np.concatenate((u, u0), axis=0) # shuffle W, c, idx = block.schuffle(W, c) u = u[idx] u = torch.from_numpy(u) u = u.long() # add self loop if self_loop: for i in range(W.shape[0]): W[i, i] = 1 # create the target target = (c == nb_of_clust).astype(float) target = torch.from_numpy(target) target = target.long() # mapping matrices W_coo = sp.coo_matrix(W) nb_edges = W_coo.nnz nb_vertices = W.shape[0] edge_to_starting_vertex = sp.coo_matrix( (np.ones(nb_edges), (np.arange(nb_edges), W_coo.row)), shape=(nb_edges, nb_vertices)) edge_to_ending_vertex = sp.coo_matrix( (np.ones(nb_edges), (np.arange(nb_edges), W_coo.col)), shape=(nb_edges, nb_vertices)) # attribute #self.adj_matrix=torch.from_numpy(W).type(default_type) #self.edge_to_starting_vertex=torch.from_numpy(edge_to_starting_vertex.toarray()).type(default_type) #self.edge_to_ending_vertex=torch.from_numpy(edge_to_ending_vertex.toarray()).type(default_type) self.adj_matrix = W self.edge_to_starting_vertex = edge_to_starting_vertex self.edge_to_ending_vertex = edge_to_ending_vertex self.signal = u self.target = target