我有一个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)