在tensorflow中,如何将多个损失与所需公式组合



我有一个CNN模型,它只有一个由s型激活组成的输出神经元,因此它的值在0到1之间。我想计算这个特定输出神经元的损失组合。

我使用了平均绝对误差和均方误差,并创建了这样的损失:

loss = tf.keras.losses.MeanAbsoluteError() + tf.keras.losses.MeanSquaredError()

现在,由于一些问题,tensorflow框架不支持这样的损失函数。下面是错误:

Traceback (most recent call last):
File "run_kfold.py", line 189, in <module>
loss = tf.keras.losses.MeanAbsoluteError() + tf.keras.losses.MeanSquaredError()
TypeError: unsupported operand type(s) for +: 'MeanAbsoluteError' and 'MeanSquaredError'

谁能建议如何计算某个输出层的组合损失?这将有助于组合创建多个加权损失,如下所示:

l_1 = 0.6
l_2 = 0.4
loss = l_1 * tf.keras.losses.MeanAbsoluteError() + l_2 *tf.keras.losses.MeanSquaredError()
然后我可以将这个损失变量传递给model.compile()函数
model.compile(optimizer=opt, 
loss=loss,
metrics = ['accuracy', sensitivity, specificity, tf.keras.metrics.RootMeanSquaredError(name='rmse')]
)

你可以写一个函数,使用MeanAbsoluteError()MeanSquaredError(),计算custom_loss并返回它:

import tensorflow as tf
# model = your_model
...
def custom_loss(y_true, y_pred):
l_1 = 0.6
l_2 = 0.4
mae = tf.keras.losses.MeanAbsoluteError()
mse = tf.keras.losses.MeanAbsoluteError()
loss_mae = mae(y_true , y_pred)
loss_mse = mse(y_true , y_pred)
total_loss = l_1*loss_mae + l_2*loss_mse
return total_loss

model.compile(loss=custom_loss, 
optimizer='Adam')
model.fit(x_train, y_train, batch_size=BATCH_SIZE, epochs=EPOCHS)

相关内容

  • 没有找到相关文章

最新更新