繁体   English   中英

如何在 keras 中测试自定义损失函数?

[英]How to test a custom loss function in keras?

我正在训练具有两个输出的 CovNet。 我的训练样本如下所示:

[0, value_a1], [0, value_a2], ...

[value_b1, 0], [value_b2, 0], ....

我想生成我自己的损失函数和包含mask_value = 0掩码对。 我有这个功能,但我不确定它是否真的符合我的要求。 所以,我想写一些测试。

from tensorflow.python.keras import backend as K
from tensorflow.python.keras import losses

def masked_loss_function(y_true, y_pred, mask_value=0):
    '''
    This model has two target values which are independent of each other.
    We mask the output so that only the value that is used for training 
    contributes to the loss.
        mask_value : is the value that is not used for training
    '''
    mask = K.cast(K.not_equal(y_true, mask_value), K.floatx())
    return losses.mean_squared_error(y_true * mask, y_pred * mask)

虽然,我不知道如何用 keras 测试这个功能? 通常,这将传递给model.compile() 像这样的东西:

x = [1, 0]
y = [1, 1]
assert masked_loss_function(x, y, 0) == 0

我认为实现这一目标的一种方法是使用 Keras 后端功能。 这里我们定义了一个函数,它以两个张量作为输入并返回一个张量作为输出:

from keras import Model
from keras import layers

x = layers.Input(shape=(None,))
y = layers.Input(shape=(None,))
loss_func = K.function([x, y], [masked_loss_function(x, y, 0)])

现在我们可以使用loss_func来运行我们定义的计算图:

assert loss_func([[[1,0]], [[1,1]]]) == [[0]]

请注意,keras 后端函数,即function ,期望输入和输出参数是张量数组。 此外, xy需要一批张量,即张量数组,形状未定义。

这是另一种解决方法,

x = [1, 0]
y = [1, 1]
F = masked_loss_function(K.variable(x), K.variable(y), K.variable(0))
assert K.eval(F) == 0 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM