示例#1
0
def scheduler(epoch):
    # 每隔100个epoch,学习率减小为原来的1/10
    if epoch % 5 == 0 and epoch != 0:
        lr = K.get_value(model.optimizer.lr)
        K.set_value(model.optimizer.lr, lr * 0.2)
        print("lr changed to {}".format(lr * 0.2))
    return K.get_value(model.optimizer.lr)
示例#2
0
 def on_epoch_end(self, epoch, logs=None):
     p, r, f1 = evaluate(valid_generator)
     if f1 > self.best_f1:
         self.best_f1 = f1
         model.save_weights('best_model_fcqa_layer_unlabel_2.weights')
     else:
         #调整学习速率
         lr = K.get_value(model.optimizer.lr)
         print("第{}epoch的lr为{}".format(epoch, lr))
         K.set_value(model.optimizer.lr, lr * 0.5)
         lr = K.get_value(model.optimizer.lr)
         print("第{}epoch的{}".format(epoch, lr))
     print(u'val_p: %.5f, val_r: %.5f, val_f1:%.5f, best_f1: %.5f\n' %
           (p, r, f1, self.best_f1))
示例#3
0
    def on_epoch_end(self, epoch, logs=None):
        lr = K.get_value(self.model.optimizer.lr)
        trans = K.eval(self.CRF.trans)
        self.NER.trans = trans
        # print(NER.trans)
        f1, precision, recall = evaluate(self.valid_data, self.NER, self.model)
        if f1 >= self.best_val_f1:
            # 取得新的最优f1, 更新最优f1, 保存模型
            self.best_val_f1 = f1
            self.model.save_weights(self.model_save_to)
        print('F1: %.5f, P: %.5f, R: %.5f, best f1: %.5f, lr: %.6f\n' %
              (f1, precision, recall, self.best_val_f1, lr))

        if True:  # 学习率调整策略0(学习率逐步降低0.3,当学习率接近0时,固定学习率)
            if lr * 0.7 > 0.000001:
                K.set_value(self.model.optimizer.lr, lr * 0.7)
        if False:  # 学习率调整策略1(学习率逐步降低0.3,当学习率接近0时,重置学习率)
            if lr * 0.7 >= 0.000001:
                K.set_value(self.model.optimizer.lr, lr * 0.7)
            else:
                K.set_value(self.model.optimizer.lr, 1e-4)
        if False:  # 学习率调整策略2(若f1降低, 则降低学习率, 当学习率接近0时,重置学习率)
            if f1 >= self.pre_f1:
                # 若f1 优于上一轮,重置早停, bad_count和patience计数器
                self.scheduler_patience = 1
                self.early_stop_patience = 3
                self.bad_count = 3
            else:
                self.scheduler_patience -= 1
                self.early_stop_patience -= 1
                self.bad_count -= 1
                if self.early_stop_patience == 0:
                    pass  # 去除早停
                    exit()
                # 若f1比上一轮的结果差,则降低学习率
                if self.scheduler_patience == 0:
                    # 若学习率过低, 则重置学习率
                    if lr * 0.7 >= 0.000001:
                        K.set_value(self.model.optimizer.lr, lr * 0.7)
                    else:
                        K.set_value(self.model.optimizer.lr, 1e-4)
                    # 调整后,重置patience计数器
                    self.scheduler_patience = 1
                if self.bad_count == 0:
                    K.set_value(self.model.optimizer.lr, 1e-4)
                    # 调整后,重置bad_count计数器
                    self.bad_count = 3

            # 更新pre_f1
            self.pre_f1 = f1
示例#4
0
 def on_epoch_begin(self, epoch, logs=None):
     print("learn-rate: {}".format(K.get_value(self.model.optimizer.lr)))