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