Example #1
0
    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)
Example #2
0
    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)
Example #3
0
 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)
Example #4
0
    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
Example #5
0
        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)