我的模型:
我建立了一个包含两个输入和三个输出的暹罗网络。所以我的损失函数是:
total loss = alpha( loss1) + alpah( loss2) + (1_alpah) ( loss3)
loss1
和loss2
是categorical cross entropy
损失函数,用于从总共8个类别中对类别标识进行分类。
loss3
是similarity loss
函数(欧几里得距离损失),用于验证两个输入是否来自同一类或不同类。
我的问题如下:
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)])
我的数据集不平衡,所以我想在class_wights
中使用model.fit()
。因此,对于相同的三损失模型,我只想将class weights
用于分类交叉熵损失(损失1和损失2),因此,如果我将其传递给{ {1}}?知道第三种损失是 custom 损失函数。
如果我想对暹罗网络的类别进行分类,我的指标是model.fit
吗?但是最终精度必须是两者的平均值,我可以通过构建自己的自定义指标来解决。但是无论如何,两个指标都需要加权求和。