Esempio n. 1
0
    def train_triplets_model(self):
        X1, X2, X3 = self.load_triplets_data()
        n_triplets = len(X1)
        print('loaded')
        model, inter_model = self.create_triplet_model()
        # print(model.summary())

        X_anchor, X_pos, X_neg = X1, X2, X3
        X = {'anchor_input': X_anchor, 'pos_input': X_pos, 'neg_input': X_neg}
        model.fit(X, np.ones((n_triplets, 2)), batch_size=64, epochs=5, shuffle=True, validation_split=0.2)

        model_json = model.to_json()
        model_dir = join(settings.OUT_DIR, 'model')
        os.makedirs(model_dir, exist_ok=True)
        with open(join(model_dir, 'model-triplets-{}.json'.format(self.data_scale)), 'w') as wf:
            wf.write(model_json)
        model.save_weights(join(model_dir, 'model-triplets-{}.h5'.format(self.data_scale)))

        test_triplets = self.load_triplets_data(role='test')
        auc_score = eval_utils.full_auc(model, test_triplets)
        # print('AUC', auc_score)

        loaded_model = self.load_triplets_model()
        print('triplets model loaded')
        auc_score = eval_utils.full_auc(loaded_model, test_triplets)
 def evaluate_triplet_model(self):
     self.init_read(path="")
     test_triplets = self.batch_triplets_data()
     loaded_model = self.load_triplets_model()
     print('triplets model loaded')
     auc_score = eval_utils.full_auc(loaded_model, test_triplets)
     print('test AUC', auc_score)
Esempio n. 3
0
    def train_triplets_model(self, train_prop=0.85):
        X1, X2, X3 = self.retrieve_data()
        n_triplets = len(X1)
        n_train = int(n_triplets * train_prop)

        self.model, self.inter_model = self.create_triplet_model()

        X_anchor, X_pos, X_neg = X1[:n_train], X2[:n_train], X3[:n_train]
        X = {'anchor_input': X_anchor, 'pos_input': X_pos, 'neg_input': X_neg}
        self.model.fit(X,
                       np.ones((n_train, 2)),
                       batch_size=64,
                       epochs=15,
                       shuffle=True,
                       validation_split=0.1)

        test_triplets = (X1[n_train:], X2[n_train:], X3[n_train:])
        eval_utils.full_auc(self.model, test_triplets)
Esempio n. 4
0
 def evaluate_triplet_model(self):
     test_triplets = self.load_triplets_data(role='test')
     loaded_model = self.load_triplets_model()
     print('triplets model loaded')
     auc_score = eval_utils.full_auc(loaded_model, test_triplets)
    def train_triplets_model(self, step_learning=False):
        if step_learning:
            model = self.load_triplets_model()
            model.compile(loss=triplet_loss, optimizer=Adam(lr=0.01), metrics=[accuracy])

            # read data
            self.init_read(self.train_triplets_dir)
            chuck_num = 0
            for X1, X2, X3 in self.batch_triplets_data():
                n_triplets = len(X1)
                # print(model.summary())
                X_anchor, X_pos, X_neg = X1, X2, X3
                X = {'anchor_input': X_anchor, 'pos_input': X_pos, 'neg_input': X_neg}

                # 模型训练
                print("chunk num:===={}".format(chuck_num))
                model.fit(X, np.ones((n_triplets, 2)), batch_size=64, shuffle=True, epochs=20)
                chuck_num += 1

            model_json = model.to_json()
            model_dir = MODEL_DIR
            os.makedirs(model_dir, exist_ok=True)
            with open(os.path.join(model_dir, '{}.json'.format(NEW_MODEL_NAME)), 'w') as wf:
                wf.write(model_json)
            model.save_weights(os.path.join(model_dir, '{}.h5'.format(NEW_MODEL_NAME)))

            # val
            self.init_read(path=self.test_triplets_dir)
            test_triplets = self.test_triplets_data()
            auc_score = eval_utils.full_auc(model, test_triplets)
            print('val AUC', auc_score)

            self.init_read(path=self.test_triplets_dir)
            loaded_model = self.load_triplets_model()
            print('triplets model loaded')
            auc_score = eval_utils.full_auc(loaded_model, test_triplets)
            print('val AUC', auc_score)

        else:
            model, inter_model = self.create_triplet_model()

            # read data
            self.init_read(self.train_triplets_dir)
            chuck_num = 0
            for X1, X2, X3 in self.batch_triplets_data():
                n_triplets = len(X1)
                # print(model.summary())
                X_anchor, X_pos, X_neg = X1, X2, X3
                X = {'anchor_input': X_anchor, 'pos_input': X_pos, 'neg_input': X_neg}

                # 模型训练
                print("chunk num:===={}".format(chuck_num))
                model.fit(X, np.ones((n_triplets, 2)), batch_size=64, shuffle=True, epochs=5)
                chuck_num += 1

            model_json = model.to_json()
            model_dir = MODEL_DIR
            os.makedirs(model_dir, exist_ok=True)
            with open(os.path.join(model_dir, '{}.json'.format(NEW_MODEL_NAME)), 'w') as wf:
                wf.write(model_json)
            model.save_weights(os.path.join(model_dir, '{}.h5'.format(NEW_MODEL_NAME)))

            # val
            self.init_read(path=self.test_triplets_dir)
            test_triplets = self.test_triplets_data()
            auc_score = eval_utils.full_auc(model, test_triplets)
            print('val AUC', auc_score)

            self.init_read(path=self.test_triplets_dir)
            loaded_model = self.load_triplets_model()
            print('triplets model loaded')
            auc_score = eval_utils.full_auc(loaded_model, test_triplets)
            print('val AUC', auc_score)