def test_graphsage_apply_1(): gs = GraphSAGE( layer_sizes=[2, 2, 2], n_samples=[2, 2, 2], bias=False, input_dim=2, multiplicity=1, normalize=None, kernel_initializer="ones", ) inp = [keras.Input(shape=(i, 2)) for i in [1, 2, 4, 8]] out = gs(inp) model = keras.Model(inputs=inp, outputs=out) x = [ np.array([[[1, 1]]]), np.array([[[2, 2], [2, 2]]]), np.array([[[3, 3], [3, 3], [3, 3], [3, 3]]]), np.array([[[4, 4], [4, 4], [4, 4], [4, 4], [5, 5], [5, 5], [5, 5], [5, 5]]]), ] expected = np.array([[16, 25]]) actual = model.predict(x) assert expected == pytest.approx(actual) # Use the node model: xinp, xout = gs.in_out_tensors() model2 = keras.Model(inputs=xinp, outputs=xout) assert pytest.approx(expected) == model2.predict(x)
def gs_nai_model(num_samples, generator, targets, optimizer, bias, dropout, normalize): layer_sizes = [50] * len(num_samples) graphsage = GraphSAGE( layer_sizes=layer_sizes, generator=generator, bias=bias, dropout=dropout, normalize=normalize, ) # Build the model and expose input and output sockets of graphsage, for node pair inputs: x_inp, x_out = graphsage.in_out_tensors() pred = tf.keras.layers.Dense(units=targets.shape[1], activation="softmax")(x_out) model = tf.keras.Model(inputs=x_inp, outputs=pred) model.compile(optimizer=optimizer, loss=tf.keras.losses.categorical_crossentropy) return model
def unsup_gs_model(num_samples, generator, optimizer, bias, dropout, normalize): layer_sizes = [50] * len(num_samples) graphsage = GraphSAGE( layer_sizes=layer_sizes, generator=generator, bias=bias, dropout=dropout, normalize=normalize, ) # Build the model and expose input and output sockets of graphsage, for node pair inputs: x_inp, x_out = graphsage.in_out_tensors() prediction = link_classification( output_dim=1, output_act="sigmoid", edge_embedding_method="ip" )(x_out) model = tf.keras.Model(inputs=x_inp, outputs=prediction) model.compile(optimizer=optimizer, loss=tf.keras.losses.binary_crossentropy) return model