在训练过程中改变损失函数

change loss function during training

假设我的损失函数是以下形式:

损失 = a*loss_1 + (1-a)*loss_2

假设我也在训练 100 步。我如何动态改变tensorflow中的损失函数,以便我在100步训练期间逐渐将"a"从1变为0?

准确地说,我希望我的损失是 损失 = 1*loss_1+0*loss_2 = loss_1 在训练开始时(在第 1 步)

loss = 0*loss_1+1*loss_2 = loss_2 最后(第100步)

中间有某种渐进的(不一定是连续的)减少。

假设 a 的值不依赖于当前步骤中完成的计算,为 a 创建一个占位符,然后使用提要字典传递您想要的值。

您可以使用 tf.train.polynomial_decay.

tf.train.polynomial_decay(learning_rate=1, global_step=step_from_placeholder,
    decay_steps=100, end_learning_rate=0,
    power=1.0, cycle=False, name=None)

这计算

global_step = min(global_step, decay_steps)
decayed_learning_rate = (learning_rate - end_learning_rate) * \
  (1 - global_step / decay_steps) ** (power) + end_learning_rate