使用Keras的不平衡数据集的多重损失

时间:2018-09-11 06:04:41

标签: python keras loss-function

我的模型

我建立了一个包含两个输入和三个输出的暹罗网络。所以我的损失函数是:

total loss = alpha( loss1) + alpah( loss2) + (1_alpah) ( loss3)

loss1loss2categorical cross entropy损失函数,用于从总共8个类别中对类别标识进行分类。 loss3similarity loss函数(欧几里得距离损失),用于验证两个输入是否来自同一类或不同类。

我的问题如下:

  1. 如果我有不同的损失,我想通过使用变量alpha对其加权,该变量的值取决于历元数。因此,我必须通过回调设置值pf alpha。我的问题是,是否可以通过loss_weights中的model.complie传递随时代数(即非标量)而变化的alpha变量。该文档说:
  

loss_weights:指定标量的可选列表或字典   系数(Python浮点数)以加权以下项的损失贡献   不同的模型输出。损失值将由   然后,模型将是所有单个损失的加权总和   通过loss_weights系数。如果是清单,则预期会有一个   1:1映射到模型的输出。如果是张量,则预期会映射   将名称(字符串)输出为标量系数。

示例

alpha = K.variable(0., dtype=tf.float32)

def changeAlpha(epoch,logs):
    new_alpha = some_function(epoch)
    K.set_value(alpha, new_alpha)
    return

alphaChanger = LambdaCallback(on_epoch_end=changeAlpha) 

model.compile(loss= [loss1, loss2, loss3], loss_weights = [alpha, alpha, (1-alpha)])
  1. 我的数据集不平衡,所以我想在class_wights中使用model.fit()。因此,对于相同的三损失模型,我只想将class weights用于分类交叉熵损失(损失1和损失2),因此,如果我将其传递给{ {1}}?知道第三种损失是 custom 损失函数。

  2. 如果我想对暹罗网络的类别进行分类,我的指标是model.fit吗?但是最终精度必须是两者的平均值,我可以通过构建自己的自定义指标来解决。但是无论如何,两个指标都需要加权求和。

0 个答案:

没有答案