使用张量流在 keras 中对损失函数的输入进行切片

Posted

技术标签:

【中文标题】使用张量流在 keras 中对损失函数的输入进行切片【英文标题】:slicing inputs for loss function in keras with tensorflow 【发布时间】:2018-07-21 19:14:39 【问题描述】:

在 Keras 中,我有一个 y_true 的目标向量,它适合具有一个输出神经元的网络。 y_true = [0, 1, 0, 1, 1....] 我有一些回报 [1,1,1,-5,1...]

我正在尝试将收益作为额外参数放入 keras 的自定义损失函数中。 Keras 只允许将两个参数传递给它(y_true 和 y_pred),但我也想传递分配给每个样本的收益。为此,我在 y_true 中添加了包含这些值的第二列。

然后我尝试通过执行以下操作再次在损失函数中分离实际的 y_true(第一列)和收益(第二列):

def custom_loss(y_true, y_pred)    
    # y_true has the payoffs in the second row
    payoffs = y_true[:, 1]
    payoffs = K.expand_dims(payoffs, 1)
    y_true = y_true[:, 0]
    y_true = K.expand_dims(y_true, 1))

    loss = K.binary_crossentropy(y_true, y_pred)
    return loss

这是我想做的简化版本(在真实版本中,我会将收益整合到损失函数中)。但是对于上面的示例,我希望损失函数与直接调用 binary_cross 熵相同,其中 y_true 仅包含 y_true(没有任何回报)。

但是,结果并不如预期,因为使用上述自定义损失函数的准确度值约为一半。

此错误的原因可能是什么?我没有正确切片 y_true 吗?

问题与this post 中的描述有关(curiale 在 2017 年 12 月 12 日的评论建议使用 slice_stack,但问题是一样的)。

【问题讨论】:

【参考方案1】:

我认为问题在于我还需要自定义度量函数。

【讨论】:

以上是关于使用张量流在 keras 中对损失函数的输入进行切片的主要内容,如果未能解决你的问题,请参考以下文章

Keras:如何使用来自另一个张量的信息对张量进行切片?

如何在 Keras 自定义损失函数中使用张量?

深度学习-Keras-层及损失函数

深度学习-Keras-层及损失函数

将 numpy 转换为张量(keras)(损失函数)

每个张量组的 Keras 自定义损失函数