Ejemplo n.º 1
0
def test_WatchYourStep_bad_init(barbell):

    generator = AdjacencyPowerGenerator(barbell, num_powers=5)

    with pytest.raises(TypeError, match="num_walks: expected.* found float"):
        wys = WatchYourStep(generator, num_walks=10.0)

    with pytest.raises(ValueError, match="num_walks: expected.* found 0"):
        wys = WatchYourStep(generator, num_walks=0)

    with pytest.raises(TypeError, match="embedding_dimension: expected.* found float"):
        wys = WatchYourStep(generator, embedding_dimension=10.0)

    with pytest.raises(ValueError, match="embedding_dimension: expected.* found 1"):
        wys = WatchYourStep(generator, embedding_dimension=1)
Ejemplo n.º 2
0
def test_WatchYourStep_init(barbell):
    generator = AdjacencyPowerGenerator(barbell, num_powers=5)
    wys = WatchYourStep(generator)

    assert wys.num_powers == 5
    assert wys.n_nodes == len(barbell.nodes())
    assert wys.num_walks == 80
    assert wys.embedding_dimension == 64
Ejemplo n.º 3
0
def test_WatchYourStep_embeddings(barbell):
    generator = AdjacencyPowerGenerator(barbell, num_powers=5)
    wys = WatchYourStep(generator, embeddings_initializer="ones")
    x_in, x_out = wys.in_out_tensors()

    model = Model(inputs=x_in, outputs=x_out)
    model.compile(optimizer="adam", loss=graph_log_likelihood)
    embs = wys.embeddings()

    assert (embs == 1).all()
Ejemplo n.º 4
0
def test_WatchYourStep(barbell, weighted):

    generator = AdjacencyPowerGenerator(barbell, num_powers=5, weighted=weighted)
    gen = generator.flow(batch_size=4)
    wys = WatchYourStep(generator)

    x_in, x_out = wys.in_out_tensors()

    model = Model(inputs=x_in, outputs=x_out)
    model.compile(optimizer="adam", loss=graph_log_likelihood)
    model.fit(gen, epochs=1, steps_per_epoch=int(len(barbell.nodes()) // 4))

    embs = wys.embeddings()
    assert embs.shape == (len(barbell.nodes()), wys.embedding_dimension)

    # build() should always return tensors backed by the same trainable weights, and thus give the
    # same predictions
    preds1 = model.predict(gen, steps=8)
    preds2 = Model(*wys.in_out_tensors()).predict(gen, steps=8)
    np.testing.assert_array_equal(preds1, preds2)
Ejemplo n.º 5
0
def _dispatch_transductive_layer(generator, model_name, params):
    """Create an embedding layer."""
    embedding_layer = None
    if model_name == "watchyourstep":
        embedding_layer = WatchYourStep(
            generator,
            num_walks=params["number_of_walks"],
            embedding_dimension=params["embedding_dimension"],
            attention_regularizer=regularizers.l2(0.5),
        )
    elif model_name == "distmult":
        embedding_layer = DistMult(
            generator,
            embedding_dimension=params["embedding_dimension"],
            embeddings_regularizer=regularizers.l2(1e-7),
        )
    elif model_name == "complex":
        embedding_layer = ComplEx(
            generator,
            embedding_dimension=params["embedding_dimension"],
            embeddings_regularizer=regularizers.l2(1e-7),
        )
    return embedding_layer
Ejemplo n.º 6
0
def test_WatchYourStep_save_load(tmpdir, barbell):
    generator = AdjacencyPowerGenerator(barbell, num_powers=5)
    wys = WatchYourStep(generator)
    test_utils.model_save_load(tmpdir, wys)