Python 具有Keras的不平衡数据集的多重损失

Python 具有Keras的不平衡数据集的多重损失,python,keras,loss-function,Python,Keras,Loss Function,我的型号: 我建立了一个暹罗网络,有两个输入和三个输出。所以我的损失函数是: total loss = alpha( loss1) + alpah( loss2) + (1_alpah) ( loss3) loss1和loss2是分类交叉熵损失函数,用于从总共8个类中对类标识进行分类。 loss3是相似性损失函数(欧氏距离损失),用于验证两个输入是来自同一类还是不同类 我的问题如下: 如果我有不同的损失,我想使用变量alpha对它们进行加权,它的值取决于历元数。因此,我必须通过回调设置值pfa

我的型号

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

total loss = alpha( loss1) + alpah( loss2) + (1_alpah) ( loss3)
loss1
loss2
分类交叉熵
损失函数,用于从总共8个类中对类标识进行分类。
loss3
相似性损失
函数(欧氏距离损失),用于验证两个输入是来自同一类还是不同类

我的问题如下:

  • 如果我有不同的损失,我想使用变量
    alpha
    对它们进行加权,它的值取决于历元数。因此,我必须通过回调设置值pf
    alpha
    。我的问题是,是否可以通过
    model.complie
    中的
    loss\u weights
    传递该α变量,该变量的值随历元数(即非标量)的变化而变化。文件说:
  • 损失权重:指定标量的可选列表或字典 系数(Python浮动)用于加权损失贡献 不同的模型输出。将通过以下方式最小化的损失值: 然后,模型将是所有单个损失的加权和,加权 通过损失权系数。如果是一个列表,它应该有一个 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)])
    
  • 我的数据集不平衡,因此我想在
    model.fit()中使用
    class\u wights
    。因此,对于三个损失的同一模型,我只想将
    类权重应用于分类交叉熵损失(损失1和损失2),因此,如果我将其传递给
    模型,它将对两个损失都有效,并且除了第三个损失之外。fit
    ?知道第三个损失是自定义损失函数

  • 如果我想为暹罗网络分类,我的度量是
    model.compile(度量=['out1':'accurity','out2':accurity']])
    ?但最终的精度必须是两者的平均值,我可以通过构建自己的自定义度量来解决这个问题。但这两个指标的加权和是否存在问题