示例#1
0
def TTA_fitting(tr_gen, val_gen, test_gen, dummy_test_gen):
    fold_val, fold_test = [], []
    for i in range(N_ENSMBLE):
        callbacks = [
            # val_lossが下がらなくなった際に学習を終了するコールバック
            EarlyStopping(monitor='val_loss', patience=30, verbose=1),
            # val_lossが下がらなくなった際に学習率を下げるコールバック
            ReduceLROnPlateau(monitor='val_loss',
                              factor=0.1,
                              patience=10,
                              min_lr=1e-9),
            # val_categorical_accuracyが最大のmodelを保存するコールバック
            ModelCheckpoint(savePath,
                            monitor='val_categorical_accuracy',
                            save_best_only=True)
        ]

        # load data
        RCNN = Residual_CNN(N_BLOCK, N_LAYER, FILTER, KERNEL)
        model = RCNN.build_model()

        # model training
        model.fit_generator(tr_gen,
                            callbacks,
                            steps_per_epoch=tr_x.shape[0] // BATCH_SIZE,
                            epochs=EPOCH,
                            validation_data=val_gen,
                            validation_steps=val_x.shape[0] // BATCH_SIZE)
        # TTA dummy test data
        val_pred = TTA(model, dummy_test_gen, sub_epoch=10)
        tta_val_acc = accuracy_score(np.argmax(val_y, 1),
                                     np.argmax(val_pred, 1))
        print(f"TTA_vaild_accuracy : {tta_val_acc}")

        # TTA test data
        test_pred = TTA(model, test_gen, sub_epoch=10)

        # stacking TTA prediction
        fold_val.append(val_pred)
        fold_test.append(test_pred)

        # TTA ensmble accuracy
        if i != 0:
            mean_val_pred = np.mean(fold_val, axis=0)
            mean_test_pred = np.mean(fold_test, axis=0)
            ensmble_tta_val_acc = accuracy_score(np.argmax(val_y, 1),
                                                 np.argmax(mean_val_pred, 1))
            print(f"ensmbleTTA_vaild_accuracy : {ensmble_tta_val_acc}")

            # saving TTA ensmble prediction of test data
            submission = pd.Series(mean_test_pred, name='label')
            submission.to_csv(os.path.join(
                PATH, 'submission_ensemble_' + str(i + 1) + ".csv"),
                              header=True,
                              index_label='id')
示例#2
0
def Fold_fitting(train_x, train_y, test):
    N_FOLD = 5
    RCNN = Residual_CNN(N_BLOCK, N_LAYER, FILTER, KERNEL)
    model = RCNN.build_model()

    fold = StratifiedKFold(n_splits=N_FOLD, random_state=1103)
    pred = []
    acc = []
    for i, (tr_idx,
            val_idx) in enumerate(fold.split(train_x, np.argmax(train_y, 1))):
        callbacks = [
            # val_lossが下がらなくなった際に学習を終了するコールバック
            EarlyStopping(monitor='val_loss', patience=30, verbose=1),
            # val_lossが下がらなくなった際に学習率を下げるコールバック
            ReduceLROnPlateau(monitor='val_loss',
                              factor=0.1,
                              patience=10,
                              min_lr=1e-9),
            # val_categorical_accuracyが最大のmodelを保存するコールバック
            ModelCheckpoint(savePath,
                            monitor='val_categorical_accuracy',
                            save_best_only=True)
        ]

        print(f"==========={i}_fold start ================= ")
        train_split = train_x[tr_idx], train_y[val_idx]
        val_split = val_y[tr_idx], val_y[val_idx]
        tr_gen, val_gen, test_gen, dummy_test_gen = get_argment_generator(
            train_split, val_split, train, test, BATCH_SIZE)

        h = model.fit_generator(tr_gen,
                                epochs=EPOCH,
                                steps_per_epoch=len(tr_x) // BATCH_SIZE,
                                validation_data=val_gen,
                                validation_steps=len(val_x) // BATCH_SIZE,
                                callbacks=callbacks)
        val_pred = model.predict(dummy_test_gen)
        test_pred = model.predict(test_gen)
        val_score = accuracy_score(np.argmax(val_split[1], 1), val_pred)
        print(f"fold_{i} val accuracy : {val_score}")
        pred.append(test_pred)

    mean_pred = np.mean(pred, axis=0)
    pred_y = np.argmax(mean_pred, 1)
    submission = pd.Series(pred_y, name='label')
    submission.to_csv(os.path.join(PATH, f"submission_fold{N_FOLD}.csv"),
                      header=True,
                      index_label='id')