Tensorflow SGDW优化器中的学习率和权重衰减调度

2024-10-17 06:31:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用TensorFlow重现this paper的一部分,问题是作者使用带有权重衰减的SGD,每30个时代将学习率降低到1/10

TensorFlow documentation

when applying a decay to the learning rate, be sure to manually apply the decay to the weight_decay as well

所以我试过了

schedule = keras.optimizers.schedules.ExponentialDecay(initial_learning_rate = 0.003,
                                                   decay_rate = 0.1,
                                                   decay_steps = steps_per_epoch*30,
                                                   staircase = True
)
optimizer = tfa.optimizers.SGDW(learning_rate = schedule,
                            weight_decay = schedule,
                            momentum = 0.9
)

(以前初始化的每个历元的步数)
但是,正如我对Keras SGD所做的那样,这不起作用,并且为decation_weight参数提出了一个“TypeError:Expected float32”。实现目标行为的正确方法是什么


Tags: thetoratetensorflow作者stepsthispaper
1条回答
网友
1楼 · 发布于 2024-10-17 06:31:49

您得到一个错误,因为您正在tensorflow加载项优化器SGDW内使用keras ExponentialDecay

根据本文,超参数是

  1. 重量衰减为0.001
  2. 动量为0.9
  3. 开始学习率为0.003,30个学时后减少10倍

那么,为什么不使用LearningRateScheduler将它减少到每30个时代10倍呢

示例代码

model = tf.keras.Sequential([
    tf.keras.layers.Dense(8, input_shape=(10,)),
    tf.keras.layers.Dense(4, activation='relu'),
    tf.keras.layers.Dense(3, activation='softmax'),
])

X = np.random.randn(10,10)
y = np.random.randint(0,4,(10,3))

model.compile(
    optimizer=tfa.optimizers.SGDW(
        weight_decay=0.001,
        momentum=0.9,
        learning_rate=0.003),
      loss=tf.keras.losses.categorical_crossentropy)

def scheduler(epoch, lr):
  if epoch  % 30 == 0:
    lr = lr*0.1  
  return lr

callback = tf.keras.callbacks.LearningRateScheduler(scheduler)
model.fit(X, y, callbacks=[callback], epochs=100)

相关问题 更多 >