在训练期间改变损失函数
Posted
技术标签:
【中文标题】在训练期间改变损失函数【英文标题】:change loss function during training 【发布时间】:2017-08-24 22:15:24 【问题描述】:假设我的损失函数是以下形式:
损失 = a*loss_1 + (1-a)*loss_2
假设我也在训练 100 步。如何在 tensorflow 中动态更改损失函数,以便在 100 步训练期间逐渐将“a”从 1 更改为 0?
确切地说,我希望我的损失是 损失 = 1*损失_1+0*损失_2 = 损失_1 在训练开始时(在第 1 步)
和
loss = 0*loss_1+1*loss_2 = loss_2 最后(第100步)
在两者之间有某种逐渐的(不一定是连续的)减少。
【问题讨论】:
我意识到一个非常老套的解决方案是在前 50 个步骤中使用 loss_1 进行训练,然后记住该训练的权重,然后在剩余的步骤中使用 loss_2 重新训练。不过,我正在寻找一种无需制作两个图表的方法,谢谢。 【参考方案1】:假设a
的值不依赖于在当前步骤完成的计算,为a
创建一个占位符,然后使用提要字典传递您想要的值。
【讨论】:
【参考方案2】:您可以使用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
【讨论】:
以上是关于在训练期间改变损失函数的主要内容,如果未能解决你的问题,请参考以下文章