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()
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)