Python 基于历元改变多输出损耗权重

Python 基于历元改变多输出损耗权重,python,tensorflow,keras,loss-function,Python,Tensorflow,Keras,Loss Function,是否可以基于历元更改TF2模型不同输出的权重 现在,我使用以下代码段来定义不同输出的优先级: model.compile(optimizer=tf.keras.optimizers.Adam(), loss=['mean_squared_error', 'mean_squared_error', 'mean_squared_error'], loss_weights=[0.25, 1., 1.]) 然而,我更愿意这些权重是否会根据时代而变

是否可以基于历元更改TF2模型不同输出的权重

现在,我使用以下代码段来定义不同输出的优先级:

model.compile(optimizer=tf.keras.optimizers.Adam(),
              loss=['mean_squared_error', 'mean_squared_error', 'mean_squared_error'],
              loss_weights=[0.25, 1., 1.])
然而,我更愿意这些权重是否会根据时代而变化。例如:

loss_weights=[0.25 + 0.01*epoch, 1. - 0.005*epoch , 1. - 0.005*epoch]

这是否可能,如果可能的话。最好的方法是什么?

具有
\u loss\u weights\u list
属性-您可以尝试通过自定义回调来更改它,就像
tf.keras.callbacks.LearningRateScheduler
在训练过程中使用学习率进行操作

编辑:另一种方法是反复调用
model.compile()
,然后只为一个历元调用
model.fit()

for epoch_idx in range(total_epochs):
    loss_weights=[0.25 + 0.01 * epoch_idx, 1. - 0.005 * epoch_idx, 1. - 0.005 * epoch_idx]
    model.compile(..., loss_weights=loss_weights)
    model.fit(..., epochs=1, initial_epoch=epoch_idx)

谢谢你的回答。它看起来方向正确,但我在自定义回调中遇到以下错误:AttributeError:无法设置属性“\u loss\u weights\u list”,可能是因为它与对象的现有只读@属性冲突。请选择其他名称。您知道如何修复它吗?您是否尝试过通过
tf.keras.backend.set_value
进行设置,或者更改列表的元素而不是更改列表本身?非常感谢!编辑后的答案中的方法奏效了。但是您需要调用fit,使用
epochs=epoch\u idx+1
而不是
1
作为参数。
tf.keras.backend.set_value
方法不幸地对我不起作用,但这也可能是因为我又犯了一个错误。很高兴帮助你!事实上,TensorFlow的GitHub上的一个不错的特性请求:)“tf.keras.Model有_loss\u weights\u list属性”,这似乎不再是真的了。我认为,现在最接近的是一个属性_loss,它有一个属性_user _loss _weights,它有权重。但我不知道怎么设置这个。