My Model:
我建立了一个暹罗网络,它有两个输入和三个输出。所以我的损失函数是:
total loss = alpha( loss1) + alpah( loss2) + (1_alpah) ( loss3)
loss1
and loss2
is categorical cross entropy
损失函数,从总共 8 个类别中对类别进行分类。loss3
is similarity loss
函数(欧氏距离损失),验证两个输入是否来自同一类或不同类。
我的问题如下:
- 如果我有不同的损失,并且我想使用变量对它们进行加权
alpha
它的值取决于纪元号。所以我必须设置值pfalpha
通过回调。我的问题是可以通过这个 alpha 变量传递它的值随纪元数(即不是标量)而变化的loss_weights
in model.complie
。文档说:
loss_weights:指定标量的可选列表或字典
系数(Python浮点数)来加权损失贡献
不同模型的输出。将通过以下方式最小化损失值
那么模型将是所有个体损失的加权和,加权
通过loss_weights系数。如果有一个列表,预计会有一个
1:1 映射到模型的输出。如果是张量,则预计映射
输出名称(字符串)到标量系数。
Example
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
in model.fit()
。因此,对于三个损失的同一模型,我想应用class weights
仅适用于分类交叉熵损失(损失 1 和损失 2),因此,如果我将其传递给,它对这两个损失都适用,但第三个损失除外model.fit
?知道第三个损失是custom损失函数。
如果我想对暹罗网络进行分类,我的指标是model.compile(metrics= ['out1':'accuracy', 'out2':accuracy']])
?但最终的准确率需要是两者的平均值,我可以通过构建自己的自定义指标来解决它。但是无论如何都可以对这两个指标进行加权求和。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)