예제 #1
0
def main():
    print("loading model")
    model_t = keras.models.load_model('model/model_t.h5', compile=False)
    model_r = keras.models.load_model('model/model_r.h5', compile=False)

    ds = DocDataset()

    x_train_snicor, _, _ = ds.load_train_data()
    x_test_snicer, x_test_boot = ds.load_test_data()

    train = model_t.predict(x_train_snicor)
    test_s = model_t.predict(x_test_snicer)
    test_b = model_t.predict(x_test_boot)

    train = train.reshape((len(x_train_snicor), -1))
    test_s = test_s.reshape((len(x_test_snicer), -1))
    test_b = test_b.reshape((len(x_test_boot), -1))

    #0-1に変換
    ms = MinMaxScaler()
    train = ms.fit_transform(train)
    test_s = ms.transform(test_s)
    test_b = ms.transform(test_b)

    # fit the model
    clf = LocalOutlierFactor(n_neighbors=5)
    y_pred = clf.fit(train)

    # 異常スコア
    Z1 = -clf._decision_function(test_s)
    Z2 = -clf._decision_function(test_b)

    #ROC曲線の描画
    y_true = np.zeros(len(test_s) + len(test_b))
    y_true[len(test_s):] = 1  #0:正常、1:異常

    # FPR, TPR(, しきい値) を算出
    fpr, tpr, _ = metrics.roc_curve(y_true, np.hstack((Z1, Z2)))

    # AUC
    auc = metrics.auc(fpr, tpr)

    # ROC曲線をプロット
    plt.plot(fpr, tpr, label='DeepOneClassification(AUC = %.2f)' % auc)
    plt.legend()
    plt.title('ROC curve')
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.grid(True)
    plt.show()
예제 #2
0
def main():
    print("loading model")
    model_r, model_t = DocNetWork()

    # dataset
    ds = DocDataset()
    x_train_snicor, x_train_ref, y_train_ref = ds.load_train_data()

    # 損失関数の値を保存
    loss_c, loss_d = [], []

    # ターゲットデータセットは、one class
    for i in range(epoch_num):
        tmp_lc, tmp_ld = [], []
        print(("epoch {} training  network ... ").format(i))

        for i in range(int(len(x_train_snicor) / batchsize)):
            range_s = batchsize * i
            range_e = batchsize * ( i + 1 ) 
            batch_target = x_train_snicor[range_s:range_e]
            batch_ref = x_train_ref[range_s:range_e]
            batch_y = y_train_ref[range_s:range_e]

            print("training target network ... ")
            tmp_lc.append(model_t.train_on_batch(batch_target, np.zeros((batchsize, feature_out))))
            print("training reference network ... ")
            tmp_ld.append(model_r.train_on_batch(batch_ref, batch_y))

        loss_c.append(np.mean(tmp_lc))
        loss_d.append(np.mean(tmp_ld))

        if (epoch_num+1) % 5 == 0:
            print("epoch:",epoch_num+1)
            print("Compact loss", loss_c[-1])
            print("Descriptive loss:", loss_d[-1])

    if not os.path.exists(model_path):
        os.mkdir(model_path)
    model_t.save(os.path.join(model_path, "model_t.h5"), include_optimizer=False)
    model_r.save(os.path.join(model_path, "model_r.h5"), include_optimizer=False)