亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

自定義學習率調度程序 TF2 和 Keras

自定義學習率調度程序 TF2 和 Keras

千萬里不及你 2023-12-08 17:21:09
我正在嘗試編寫自定義學習率調度程序:帶預熱的余弦退火。但我既不能在 Keras 中使用它,也不能在 Tensorflow 中使用它。下面是代碼:import tensorflow as tfimport numpy as npdef make_linear_lr(min_lr, max_lr, number_of_steps):    def gen_lr(step):        return (max_lr - min_lr) / number_of_steps * step + min_lr    return gen_lrdef make_cosine_anneal_lr(learning_rate, alpha, decay_steps):    def gen_lr(global_step):        global_step = min(global_step, decay_steps)        cosine_decay = 0.5 * (1 + np.cos(np.pi * global_step / decay_steps))        decayed = (1 - alpha) * cosine_decay + alpha        decayed_learning_rate = learning_rate * decayed        return decayed_learning_rate    return gen_lrdef make_cosine_annealing_with_warmup(min_lr, max_lr, number_of_steps, alpha, decay_steps):    gen_lr_1 = make_linear_lr(min_lr, max_lr, number_of_steps)    gen_lr_2 = make_cosine_anneal_lr(max_lr, alpha, decay_steps)    def gen_lr(global_step):        if global_step < number_of_steps:            return gen_lr_1(global_step)        else:            return gen_lr_2(global_step - number_of_steps)            return gen_lrclass CosineAnnealingWithWarmUP(tf.keras.optimizers.schedules.LearningRateSchedule):  def __init__(self, min_lr, max_lr, number_of_steps, alpha, decay_steps):    super(CosineAnnealingWithWarmUP, self).__init__()    self.gen_lr_ca =  make_cosine_annealing_with_warmup(min_lr, max_lr, number_of_steps, alpha, decay_steps)  def __call__(self, step):    return tf.cast(self.gen_lr_ca(step), tf.float32)learning_rate_fn = CosineAnnealingWithWarmUP(.0000001, 0.01, 10_000, 0, 150_000)optimizer=tf.keras.optimizers.SGD(    learning_rate=learning_rate_fn, 當我嘗試將它與 TensorFlow 一起使用時,在 get_model_train_step_function 中傳遞優化器 - 如果我刪除 @tf.function 裝飾器,它就會起作用。但它不適用于@tf.function,錯誤顯示:OperatorNotAllowedInGraphError: using a tf.Tensoras a Python boolis not allowed: AutoGraph did conversion this function。這可能表明您正在嘗試使用不受支持的功能。我應該如何編寫自定義學習率調度程序?另外,我想將此時間表與 Keras 一起使用。但它在那里根本不起作用。
查看完整描述

1 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

您需要排除 numpy 調用并用張量流運算符替換 python 條件(“if”、“min”):


def make_cosine_anneal_lr(learning_rate, alpha, decay_steps):

    def gen_lr(global_step):


        #global_step = min(global_step, decay_steps)


        global_step = tf.minimum(global_step, decay_steps)

        cosine_decay = 0.5 * (1 + tf.cos(3.1415926 * global_step / decay_steps)) # changed np.pi to 3.14

        decayed = (1 - alpha) * cosine_decay + alpha

        decayed_learning_rate = learning_rate * decayed

        return decayed_learning_rate

    return gen_lr


def make_cosine_annealing_with_warmup(min_lr, max_lr, number_of_steps, alpha, decay_steps):

    gen_lr_1 = make_linear_lr(min_lr, max_lr, number_of_steps)

    gen_lr_2 = make_cosine_anneal_lr(max_lr, alpha, decay_steps)

    def gen_lr(global_step):


      #if global_step < number_of_steps:

      #    return gen_lr_1(global_step)

      #else:

      #    return gen_lr_2(global_step - number_of_steps)


      a = global_step < number_of_steps

      a = tf.cast(a, tf.float32)

      b = 1. - a

      return a * gen_lr_1(global_step) + b * gen_lr_2(global_step - number_of_steps)

        

    return gen_lr

這樣的時間表適用于 Keras。


查看完整回答
反對 回復 2023-12-08
  • 1 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號