def __init__(self, A, **kwargs): A_hat = A.copy() + nd.eye(*A.shape) D = nd.sum(A_hat, axis=0) D_hat = D**-0.5 D_hat = nd.diag(D_hat) A_hat = D_hat * A_hat * D_hat super().__init__(A=A_hat, **kwargs)
def __init__(self, A, in_units, out_units, activation=lambda x: x, **kwargs): super().__init__(**kwargs) self.in_units = in_units self.out_units = out_units A = A.copy() + eye(*A.shape) with self.name_scope(): self.aggregator = MeanAggregator(A) self.propegator = Propagator(self.in_units, self.out_units, activation)
def __init__(self, A, in_units, out_units, activation='relu', **kwargs): super().__init__(**kwargs) I = nd.eye(*A.shape) A_hat = A.copy() + I D = nd.sum(A_hat, axis=0) D_inv = D**-0.5 D_inv = nd.diag(D_inv) A_hat = D_inv * A_hat * D_inv self.in_units, self.out_units = in_units, out_units with self.name_scope(): self.A_hat = self.params.get_constant('A_hat', A_hat) self.W = self.params.get('W', shape=(self.in_units, self.out_units)) if activation == 'identity': self.activation = lambda X: X else: self.activation = nn.Activation(activation)
def draw(self): ''' Draw samples from distribtions. Returns: `Tuple` of `mx.nd.array`s. ''' observed_arr = nd.zeros( (self.__batch_size, 1, self.__cluster_n, self.__cluster_n), ctx=self.__ctx) observed_arr[:, 0] = nd.eye(self.__cluster_n, ctx=self.__ctx) observed_arr = observed_arr + nd.random.uniform( low=self.__low, high=self.__high, shape=(self.__batch_size, 1, self.__cluster_n, self.__cluster_n), ctx=self.__ctx) if self.noise_sampler is not None: observed_arr = observed_arr + self.noise_sampler.draw() return observed_arr
model.add(features) logger.info("GCN Summary: \n{}".format(model)) classifier = LogisticRegressor(out_units) model.add(classifier) logger.info("GCN + LR Summary: \n{}".format(model)) model.hybridize() model.initialize(Uniform(1)) return model, features # ## Model 1: Identity Matrix as Features X_1 = I = nd.eye(*A.shape) model_1, features_1 = build_model(A, X_1) model_1(X_1) # ## Model 2: Distance to Administrator and Instructor as Additional Features X_2 = nd.zeros((A.shape[0], 2)) node_distance_instructor = shortest_path_length(zkc.network, target=33) node_distance_administrator = shortest_path_length(zkc.network, target=0) for node in zkc.network.nodes(): X_2[node][0] = node_distance_administrator[node] X_2[node][1] = node_distance_instructor[node] X_2 = nd.concat(X_1, X_2) model_2, features_2 = build_model(A, X_2)