【发布时间】:2019-06-25 16:04:12
【问题描述】:
我正在尝试使用 Keras 来实现在 A General and Adaptive Robust Loss Function 中完成的工作。作者提供了处理硬细节的 tensorflow 代码。我只是想在 Keras 中使用他的预建功能。
他的自定义损失函数正在学习一个控制损失函数形状的参数“alpha”。除了训练期间的损失外,我还想跟踪“阿尔法”。
我对 Keras 自定义损失函数和使用包装器有些熟悉,但我不完全确定如何使用回调来跟踪“alpha”。下面是我如何选择在 Keras 中天真地构建损失函数。但是我不确定我将如何访问“alpha”进行跟踪。
From the provided tensorflow code,函数 lossfun(x) 返回一个元组。
def lossfun(x,
alpha_lo=0.001,
alpha_hi=1.999,
alpha_init=None,
scale_lo=1e-5,
scale_init=1.,
**kwargs):
"""
Returns:
A tuple of the form (`loss`, `alpha`, `scale`).
"""
def customAdaptiveLoss():
def wrappedloss(y_true,y_pred):
loss, alpha, scale = lossfun((y_true-y_pred)) #Author's function
return loss
return wrappedloss
Model.compile(optimizer = optimizers.Adam(0.001),
loss = customAdaptiveLoss,)
同样,我希望在训练期间跟踪变量“alpha”。
【问题讨论】:
-
建议:添加一个访问您用于 customAdaptiveLoss 的同一对象的自定义指标。您可以在该对象中保存 alpha 并将其打印在您的指标中。困难的部分是这必须是张量而不是 python 值。即定义一个 K.variable,在计算损失时应该更新它,然后在自定义指标中使用结果。这可能有点棘手,但应该是可行的。