使用张量流在 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 中对损失函数的输入进行切片的主要内容,如果未能解决你的问题,请参考以下文章