Exemplo n.º 1
0
def test_RGCN_apply_dense_directed():
    G, features = create_graph_features(is_directed=True)

    As = get_As(G)
    As = [np.expand_dims(A.todense(), 0) for A in As]

    generator = RelationalFullBatchNodeGenerator(G, sparse=False)
    rgcnModel = RGCN([2],
                     generator,
                     num_bases=10,
                     activations=["relu"],
                     dropout=0.5)
    x_in, x_out = rgcnModel.in_out_tensors()
    model = keras.Model(inputs=x_in, outputs=x_out)

    # Check fit method
    out_indices = np.array([[0, 1]], dtype="int32")
    preds_1 = model.predict([features[None, :, :], out_indices] + As)
    assert preds_1.shape == (1, 2, 2)

    # Check fit method
    preds_2 = model.predict(generator.flow(["a", "b"]))
    assert preds_2.shape == (1, 2, 2)

    assert preds_1 == pytest.approx(preds_2)
Exemplo n.º 2
0
def test_RGCN_apply_sparse_directed():
    G, features = create_graph_features(is_directed=True)

    As = get_As(G)
    As = [A.tocoo() for A in As]

    A_indices = [
        np.expand_dims(np.hstack((A.row[:, None], A.col[:, None])), 0) for A in As
    ]
    A_values = [np.expand_dims(A.data, 0) for A in As]

    generator = RelationalFullBatchNodeGenerator(G, sparse=True)
    rgcnModel = RGCN([2], generator, num_bases=10, activations=["relu"], dropout=0.5)

    x_in, x_out = rgcnModel.build()
    model = keras.Model(inputs=x_in, outputs=x_out)

    # Check fit method
    out_indices = np.array([[0, 1]], dtype="int32")
    preds_1 = model.predict([features[None, :, :], out_indices] + A_indices + A_values)
    assert preds_1.shape == (1, 2, 2)

    # Check fit_generator method
    preds_2 = model.predict_generator(generator.flow(["a", "b"]))
    assert preds_2.shape == (1, 2, 2)

    assert preds_1 == pytest.approx(preds_2)
Exemplo n.º 3
0
    def generator_flow(self, G, node_ids, node_targets, sparse=False):
        generator = RelationalFullBatchNodeGenerator(G, sparse=sparse)
        n_nodes = len(G.nodes())

        gen = generator.flow(node_ids, node_targets)
        if sparse:
            [X, tind, *As], y = gen[0]
            As_indices = As[:self.num_relationships]
            As_values = As[self.num_relationships:]

            As_sparse = [
                sps.coo_matrix(
                    (A_val[0], (A_ind[0, :, 0], A_ind[0, :, 1])),
                    shape=(n_nodes, n_nodes),
                ) for A_ind, A_val in zip(As_indices, As_values)
            ]
            As_dense = [A.toarray() for A in As_sparse]

        else:
            [X, tind, *As], y = gen[0]
            As_dense = As

        assert np.allclose(X,
                           gen.features)  # X should be equal to gen.features
        assert tind.shape[1] == len(node_ids)

        if node_targets is not None:
            assert np.allclose(y, node_targets)

        return As_dense, tind, y
Exemplo n.º 4
0
    def test_generator_flow_targets_as_list(self):
        generator = RelationalFullBatchNodeGenerator(self.G)
        node_ids = list(self.G.nodes())[:3]
        node_targets = [1] * len(node_ids)
        gen = generator.flow(node_ids, node_targets)

        inputs, y = gen[0]
        assert y.shape == (1, 3)
        assert np.sum(y) == 3
Exemplo n.º 5
0
 def test_generator_flow_targets_not_iterator(self):
     generator = RelationalFullBatchNodeGenerator(self.G)
     node_ids = list(self.G.nodes())[:3]
     node_targets = 1
     with pytest.raises(TypeError):
         generator.flow(node_ids, node_targets)