Example #1
0
def elm_predict(model,
                X_train,
                X_test,
                X_valid,
                multiTasks,
                unweighted,
                stl,
                dictForLabelsTrain,
                dictForLabelsTest,
                dictForLabelsValid,
                hidden_num=50,
                main_task_id=-1,
                elm_save_path='./model/elm.ckpt',
                dataset='test'):
    sess = tf.Session()

    print('elm high level feature generating')
    pred_train = model.predict([X_train])
    feat_train = high_level_feature_mtl(pred_train,
                                        stl=stl,
                                        main_task_id=main_task_id)
    print('high level feature dim for train: ', feat_train.shape[1])

    #add total features
    add_high_feature(feat_train, multiTasks, dictForLabelsTrain,
                     total_high_pred_train)

    pred_test = model.predict([X_test])
    feat_test = high_level_feature_mtl(pred_test,
                                       stl=stl,
                                       main_task_id=main_task_id)

    #add total features
    add_high_feature(feat_test, multiTasks, dictForLabelsTest,
                     total_high_pred_test)

    print('high level feature dim for test: ', feat_test.shape[1])

    if len(X_valid) != 0:
        pred_valid = model.predict([X_valid])
        feat_valid = high_level_feature_mtl(pred_valid,
                                            stl=stl,
                                            main_task_id=main_task_id)

    scores = []
    for task, classes, idx in multiTasks:
        elm = ELM(sess,
                  feat_train.shape[0],
                  feat_train.shape[1],
                  hidden_num,
                  dictForLabelsTrain[task].shape[1],
                  task=str(task))

        print('elm training')
        elm.feed(feat_train, dictForLabelsTrain[task])
        elm.save(elm_save_path + "." + str(task) + ".elm.ckpt")

        print('elm testing')
        labels = dictForLabelsTest[task]
        if unweighted:
            preds = elm.test(feat_test)
            scores.append(unweighted_recall(preds, labels, task, dataset))
        else:
            acc = elm.test(feat_test, labels)
            scores.append(acc)

        if len(X_valid) != 0:
            print('elm validating')
            labels = dictForLabelsValid[task]
            if unweighted:
                preds = elm.test(feat_valid)
                scores.append(unweighted_recall(preds, labels, task, dataset))
            else:
                acc = elm.test(feat_valid, labels)
                scores.append(acc)
    return scores
Example #2
0
            portion_over_threshold = portion_over_threshold / max(
                training_pred_emotion_sequence.shape[1], 1)
            high_lvl_features[index] = np.concatenate(
                (max_, min_, mean, portion_over_threshold), axis=1)
            high_lvl_labels[index] = labels[2]
        return high_lvl_features, high_lvl_labels

    training_high_lvl_features, training_labels = extract_high_level_features(
        training_sequence)
    test_high_lvl_features, testing_labels = extract_high_level_features(
        test_sequence)

    sess = tf.Session()
    elm = ELM(sess,
              *training_high_lvl_features.shape,
              hidden_num=50,
              output_len=4)
    elm.feed(training_high_lvl_features, training_labels)
    predictions = elm.test(test_high_lvl_features)
    predictions = np.argmax(predictions, axis=1)
    testing_labels = np.argmax(testing_labels, axis=1)
    cm = confusion_matrix(testing_labels,
                          predictions,
                          labels=np.array([0, 1, 2, 3]))
    with open(args.save_dir + f'/{args.prefix}_elm_confussion_matrix.txt',
              mode='w') as f:
        f.write(str(cm))
    with open(args.save_dir + f'/{args.prefix}_elm_confussion_matrix.pkl',
              mode='wb') as f:
        pickle.dump(cm, f, protocol=4)