我正在尝试使用TensorFlow复制this paper的一部分,问题是作者使用SGD进行了权重衰减,将学习率每30个时代降低到1/10。
在对学习率进行衰减时,请确保也对weight_decay手动进行衰减
所以我尝试了
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
)
(steps_per_epoch先前已初始化)
就像我对Keras SGD所做的那样,它无法正常工作,并为衰减_权重参数引发了“ TypeError:Expected float32”。实现目标行为的正确方法是什么?
答案 0 :(得分:0)
由于在tensorflow附加优化器ExponentialDecay
中使用了keras SGDW
,因此出现错误。
根据纸张超参数是
所以为什么不使用LearningRateScheduler
来将其减少到10个30历元
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)