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()
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)
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
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)
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
def test_WatchYourStep_save_load(tmpdir, barbell): generator = AdjacencyPowerGenerator(barbell, num_powers=5) wys = WatchYourStep(generator) test_utils.model_save_load(tmpdir, wys)