【发布时间】:2018-11-24 12:05:23
【问题描述】:
我正在训练具有两个输出的 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
【问题讨论】:
-
另外,由于您还没有接受任何答案,看来您正在寻找另一种或更好的解决方案。因此,该编辑有两个好处:1. 那些正在跟踪 python 标签的人会看到您的问题,并可能会提供另一个答案;以及 2. 它使您的问题转到问题“活动”选项卡的顶部(从而增加被别人看到的机会)。总而言之,这只是一些建议,您可以为所欲为。我只是出于好奇而询问原因,因为我以前做过很多次但从未见过这样的事情。
-
哦,我很抱歉。当我查看更改时,您似乎复制粘贴了完全相同的内容。所有内容都突出显示为已删除并重新插入。所以,我根本没有看到你的变化。
-
没问题。那是因为我删除了语法高亮指令(即
<!-- language-all: lang-py -->);因为添加 Python 标记会自动突出显示语法,并且不再需要该指令。
标签: python testing tensorflow keras loss-function