Python 有没有办法在tensorflow中动态加权增加损失函数?
在我的代码中,我有两个自定义损失函数。一个是负对数似然(NLL),另一个是KL散度(KLD) 每一个都单独计算,并使用Python 有没有办法在tensorflow中动态加权增加损失函数?,python,tensorflow2.0,tf.keras,Python,Tensorflow2.0,Tf.keras,在我的代码中,我有两个自定义损失函数。一个是负对数似然(NLL),另一个是KL散度(KLD) 每一个都单独计算,并使用Model.add_loss(NLL)和Model.add_loss(KLD)添加到tf.keras.Model中 对于第一个x时代,我只希望合并NLL,但之后我希望KLD逐渐增加其影响(退火)。我希望的结构是: weight_KL {epoch 00 -> 09} == 0.0 weight_KL {epoch 10 -> 19} += 0.1 weight_KL
Model.add_loss(NLL)
和Model.add_loss(KLD)
添加到tf.keras.Model
中
对于第一个x
时代,我只希望合并NLL,但之后我希望KLD逐渐增加其影响(退火)。我希望的结构是:
weight_KL {epoch 00 -> 09} == 0.0
weight_KL {epoch 10 -> 19} += 0.1
weight_KL {epoch 20 -> ..} == 1.0
我的看法是,有两个损失函数加在一起,权重随时间变化:
total_loss = NLL + weight_KL * KLD
在TensorFlow 2中有没有实现这一点的方法?您可以在
model.fit()中使用callbacks
参数。根据需要,在“新纪元”开始时的内置功能或“新纪元”结束时的中添加您的损失调整
定义回调函数,如下所示:
# Define the Required Callback Function
class LossCallback(tf.keras.callbacks.Callback):
def on_epoch_begin(self, epoch, logs=None):
if (epoch < 3):
model.add_loss(NLL + KLD)
else:
model.add_loss(NLL + KLD +0.1)
在回调
中还有几个选项,如批处理上的开始
、批处理上的结束
等,您可以找到它们
希望这能回答你的问题 您可以在model.fit()
中使用callbacks
参数。根据需要,在“新纪元”开始时的内置功能或“新纪元”结束时的中添加您的损失调整
定义回调函数,如下所示:
# Define the Required Callback Function
class LossCallback(tf.keras.callbacks.Callback):
def on_epoch_begin(self, epoch, logs=None):
if (epoch < 3):
model.add_loss(NLL + KLD)
else:
model.add_loss(NLL + KLD +0.1)
在回调
中还有几个选项,如批处理上的开始
、批处理上的结束
等,您可以找到它们
希望这能回答你的问题 是否有可能提供一个简单、可复制的示例?您是否愿意使用GradientTape
而不是model.fit()
?是否有可能提供一个简单、可复制的示例?您是否愿意使用GradientTape
而不是model.fit()
?@evanr70-如果答案回答了您的问题,请您投票并接受答案。谢谢。@evanr70-如果答案回答了你的问题,你能投票接受吗。非常感谢。