示例#1
0
def train(epochs):
    train_ds, test_ds, field_dict, field_index = get_data()

    model = DeepFM(embedding_size=config.EMBEDDING_SIZE, num_feature=len(field_index),
                   num_field=len(field_dict), field_index=field_index)

    optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)

    print("Start Training: Batch Size: {}, Embedding Size: {}".format(config.BATCH_SIZE, config.EMBEDDING_SIZE))
    start = perf_counter()
    for i in range(epochs):
        acc = BinaryAccuracy(threshold=0.5)
        auc = AUC()
        loss_history = []

        for x, y in train_ds:
            loss = train_on_batch(model, optimizer, acc, auc, x, y)
            loss_history.append(loss)

        print("Epoch {:03d}: 누적 Loss: {:.4f}, Acc: {:.4f}, AUC: {:.4f}".format(
            i, np.mean(loss_history), acc.result().numpy(), auc.result().numpy()))

    test_acc = BinaryAccuracy(threshold=0.5)
    test_auc = AUC()
    for x, y in test_ds:
        y_pred = model(x)
        test_acc.update_state(y, y_pred)
        test_auc.update_state(y, y_pred)

    print("테스트 ACC: {:.4f}, AUC: {:.4f}".format(test_acc.result().numpy(), test_auc.result().numpy()))
    print("Batch Size: {}, Embedding Size: {}".format(config.BATCH_SIZE, config.EMBEDDING_SIZE))
    print("걸린 시간: {:.3f}".format(perf_counter() - start))
    model.save_weights('weights/weights-epoch({})-batch({})-embedding({}).h5'.format(
        epochs, config.BATCH_SIZE, config.EMBEDDING_SIZE))
示例#2
0
    def get_metrics(y, y_pred):

        cnf_matrix = confusion_matrix(y, y_pred)

        false_positive = cnf_matrix.sum(
            axis=0) - np.diag(cnf_matrix).astype(float)
        false_negative = cnf_matrix.sum(
            axis=1) - np.diag(cnf_matrix).astype(float)
        true_positive = np.diag(cnf_matrix).astype(float)
        true_negative = (
            cnf_matrix.sum() -
            (false_positive + false_negative + true_positive)).astype(float)

        y = to_categorical(y, num_classes=5)
        y_pred = to_categorical(y_pred, num_classes=5)

        auc = AUC()
        _ = auc.update_state(y, y_pred)
        acc = CategoricalAccuracy()
        _ = acc.update_state(y, y_pred)

        return {
            'accuracy': acc.result().numpy(),
            'auc': auc.result().numpy(),
            'sensitivity': true_positive / (true_positive + false_negative),
            'specificity': true_negative / (true_negative + false_positive)
        }
    def result(self):
        if self.average == 'macro':  #Unweighted mean of AUC-ROCs
            results = []
            for i in range(self.num_labels):
                results.append(self.AUCs[i].result())
            return tf.reduce_mean(results, axis=0)

        if self.average == 'micro':  #Global metric by summing TP, FP, FN
            micro_AUC = AUC(**AUC_kwargs)
            micro_TP, micro_FP, micro_FN, micro_TN = self.get_micro_values()
            micro_AUC.true_positives = micro_TP
            micro_AUC.false_positives = micro_FP
            micro_AUC.false_negatives = micro_FN
            micro_AUC.true_negatives = micro_TN
            return micro_AUC.result()
def get_auc(label_value, predict_value):
    m = AUC()
    _ = m.update_state(y_true=label_value, y_pred=predict_value)
    auc = m.result().numpy()
    return auc