Beispiel #1
0
def test_fit_predict_HolE():
    model = HolE(batches_count=1, seed=555, epochs=20, k=10,
                 loss='pairwise', loss_params={'margin': 1}, regularizer='LP',
                 regularizer_params={'lambda': 0.1, 'p': 2}, 
                 optimizer='adagrad', optimizer_params={'lr':0.1})
    X = np.array([['a', 'y', 'b'],
                  ['b', 'y', 'a'],
                  ['a', 'y', 'c'],
                  ['c', 'y', 'a'],
                  ['a', 'y', 'd'],
                  ['c', 'y', 'd'],
                  ['b', 'y', 'c'],
                  ['f', 'y', 'e']])
    model.fit(X)
    y_pred, _ = model.predict(np.array([['f', 'y', 'e'], ['b', 'y', 'd']]), get_ranks=True)
    print(y_pred)
    assert y_pred[0] > y_pred[1]
Beispiel #2
0
def select_kge(kge_name, batch_size, epochs, seed, verbose):
    model = ''
    # Select kge_name
    if kge_name == 'complex':
        # ComplEx model
        model = ComplEx(
            batches_count=batch_size,
            epochs=epochs,
            k=150,
            eta=20,
            optimizer='adam',
            optimizer_params={'margin':
                              5},  #,'lr':learning_rate}, # default lr:0.1
            loss='multiclass_nll',
            loss_params={},
            regularizer='LP',
            regularizer_params={
                'p': 2,
                'lambda': 1e-4
            },
            seed=seed,
            verbose=verbose)
    elif kge_name == 'hole':
        # HolE model
        model = HolE(batches_count=batch_size,
                     epochs=epochs,
                     k=100,
                     eta=20,
                     optimizer='adam',
                     optimizer_params={'lr': learning_rate},
                     loss='multiclass_nll',
                     regularizer='LP',
                     regularizer_params={
                         'p': 3,
                         'lambda': 1e-5
                     },
                     seed=seed,
                     verbose=verbose)
    elif kge_name == 'transe':
        # TransE model
        model = TransE(
            batches_count=batch_size,
            epochs=epochs,
            k=350,
            eta=20,
            optimizer='adam',
            optimizer_params={'margin':
                              5},  #,'lr':learning_rate}, # default lr:0.1
            loss='multiclass_nll',  #loss='pairwise',
            loss_params={},  #loss_params={'margin:5'},
            regularizer='LP',
            regularizer_params={
                'p': 2,
                'lambda': 1e-4
            },
            seed=seed,
            verbose=verbose)
    else:
        sys.exit('Given kge_name is not valid.')

    return model
 log_file = open("eval_log.txt", "a")
 print("\n\n----"+log_key+"----", file=log_file)
 print("------------------------------------------------")
 print("%d) Implementation Model: %s" % (1, mdl[j]))
 print("------------------------------------------------")
 start_time = time.time()  # START: Training Time Tracker    
 K.clear_session()  # Kills current TF comp-graph & creates a new one
 
 if (mdl[j] == "ComplEx"):
     model = ComplEx(verbose=True)
 elif (mdl[j] == "ConvKB"):
     model = ConvKB(verbose=True)
 elif (mdl[j] == "DistMult"):
     model = DistMult(verbose=True)
 elif (mdl[j] == "HolE"):
     model = HolE(verbose=True)
 elif (mdl[j] == "TransE"):
     model = TransE(verbose=True)
 elif (mdl[j] == "RandomBaseline"):
     model = RandomBaseline(verbose=True)
 tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)  # TensorFlow will tell you all messages that have the label ERROR
 model.fit(train_X)
 
 # Save model at its best-performance point
 save_model(model, 'best_ampliGraph_model.pkl')
 del model  # Delete older model
 # Load recently save best-performance model
 model = restore_model('./best_ampliGraph_model.pkl')    
 if model.is_fitted:
     print('The model is fit!')
 else:
Beispiel #4
0
# International football matches triples
url = 'https://ampligraph.s3-eu-west-1.amazonaws.com/datasets/football.csv'
open('football.csv', 'wb').write(requests.get(url).content)
X = load_from_csv('.', 'football.csv', sep=',')[:, 1:]

# Train test split
X_train, X_test = train_test_split_no_unseen(X, test_size=10000)

# ComplEx model
model = HolE(batches_count=50,
             epochs=300,
             k=100,
             eta=20,
             optimizer='adam',
             optimizer_params={'lr': 1e-4},
             loss='multiclass_nll',
             regularizer='LP',
             regularizer_params={
                 'p': 3,
                 'lambda': 1e-5
             },
             seed=0,
             verbose=True)

model.fit(X_train)

filter_triples = np.concatenate((X_train, X_test))
ranks = evaluate_performance(X_test,
                             model=model,
                             filter_triples=filter_triples,
                             use_default_protocol=True,
                             verbose=True)