我正在寻找一种方法来创建如下所示的损失函数:然后该函数应最大化以获得奖励。这有可能在 Keras 中实现吗?任何如何实现这一点的建议都将受到高度赞赏。
def special_loss_function(y_true, y_pred, reward_if_correct, punishment_if_false):
loss = if binary classification is correct apply reward for that training item in accordance with the weight
if binary classification is wrong, apply punishment for that training item in accordance with the weight
)
return K.mean(loss, axis=-1)
我一直在为我的示例寻找的方法是将权重与 y_true 一起传递,然后将张量分成两部分,将权重和 y_true 分开,如下所示。这样的方法是否可行,或者这会干扰标准化过程等?
def decompose_y_true(y_true_and_weights):
y_true = y_true_and_weights[:,1]
weights= y_true_and_weights[:,1:]
return y_true, weights
def custom_loss(y_true_and_weights, y_pred):
y_true, y_weights = decompose_y_true(y_true_and_weights)
loss = # some loss operation
return K.mean(loss, axis=-1)
如果我可以将我的权重传递给 fit 函数中的 sample_weights 参数,那就更优雅了,但这些权重的形状似乎有一些限制,而且也没有办法在损失函数中检索它们我可以告诉。或者有什么方法可以以某种方式将它传递给损失函数,以便我可以从那里对它们进行操作?