def test_evaluate_generator_link_prediction(): edge_ids_test = np.array([[1, 2], [2, 3], [1, 3]]) edge_labels_test = np.array([1, 1, 0]) graph = example_graph_1(feature_size=4) # base_model, keras_model, generator, train_gen gnn_models = [ create_graphSAGE_model(graph, link_prediction=True), create_HinSAGE_model(graph, link_prediction=True), ] for gnn_model in gnn_models: keras_model = gnn_model[1] generator = gnn_model[2] ens = Ensemble(keras_model, n_estimators=2, n_predictions=3) ens.compile(optimizer=Adam(), loss=binary_crossentropy, weighted_metrics=["acc"]) # Check that passing invalid parameters is handled correctly. We will not check error handling for those # parameters that Keras will be responsible for. with pytest.raises(ValueError): ens.evaluate_generator( generator=generator, test_data=edge_ids_test, test_targets=edge_labels_test, ) with pytest.raises(ValueError): ens.evaluate_generator( generator=generator, test_data=edge_labels_test, test_targets=None, # must give test_targets ) with pytest.raises(ValueError): ens.evaluate_generator( generator=generator.flow(edge_ids_test, edge_labels_test), test_data=edge_ids_test, test_targets=edge_labels_test, ) # We won't train the model instead use the initial random weights to test # the evaluate_generator method. test_metrics_mean, test_metrics_std = ens.evaluate_generator( generator.flow(edge_ids_test, edge_labels_test)) assert len(test_metrics_mean) == len(test_metrics_std) assert len(test_metrics_mean.shape) == 1 assert len(test_metrics_std.shape) == 1
def test_evaluate_generator(): test_data = np.array([3, 4, 5]) test_targets = np.array([[1, 0], [0, 1], [0, 1]]) graph = example_graph_1(feature_size=5) # base_model, keras_model, generator, train_gen gnn_models = [ create_graphSAGE_model(graph), create_HinSAGE_model(graph), create_GCN_model(graph), create_GAT_model(graph), ] for gnn_model in gnn_models: keras_model = gnn_model[1] generator = gnn_model[2] ens = Ensemble(keras_model, n_estimators=2, n_predictions=1) ens.compile(optimizer=Adam(), loss=categorical_crossentropy, weighted_metrics=["acc"]) # Check that passing invalid parameters is handled correctly. We will not check error handling for those # parameters that Keras will be responsible for. with pytest.raises(ValueError): ens.evaluate_generator(generator=generator, test_data=test_data, test_targets=test_targets) with pytest.raises(ValueError): ens.evaluate_generator( generator=generator, test_data=test_data, test_targets=None, # must give test_targets ) with pytest.raises(ValueError): ens.evaluate_generator( generator=generator.flow(test_data, test_targets), test_data=test_data, test_targets=test_targets, ) # We won't train the model instead use the initial random weights to test # the evaluate_generator method. test_metrics_mean, test_metrics_std = ens.evaluate_generator( generator.flow(test_data, test_targets)) assert len(test_metrics_mean) == len(test_metrics_std) assert len(test_metrics_mean.shape) == 1 assert len(test_metrics_std.shape) == 1