Keras自定义损耗耦合不同样本

时间:2019-07-05 17:22:32

标签: python tensorflow keras sample loss

我试图了解Keras在一般情况下实际上如何计算自定义损失的梯度。 通常,损失定义为独立贡献样本的总和。这最终允许在梯度的计算中适当地并行化。 但是,如果我在其上添加全局非线性,从而耦合各个样本的贡献,Keras是否能够正确地对待微分?

实际上是将f(sum_i(x_i))最小化还是一次计算一个样本,从而将其减少为sum_i(f(x_i))?

下面是使用日志功能的示例。

def custom_loss(y_true,y_pred): return K.log(1+K.mean((y_pred-y_true)*(y_pred-y_true)))

我已经检查过文档,但找不到确切答案。

1 个答案:

答案 0 :(得分:0)

它最小化您告诉它最小化的任何东西。

  • 如果要最小化总和的对数,请在总和之后应用该对数。
  • 如果要最小化每个样本的对数并在以后求和,请在求和前应用日志
def log_of_sum(y_true, y_pred):
    return K.log(1 + K.mean(K.square(y_true-y_pred)))

def sum_of_logs(y_true, y_ored):
    return K.mean(K.log(1 + K.square(y_true-y_pred))) 
    #mean is optional here - you can return all the samples and Keras will handle it
    #returning all the samples allows other functions to work, like sample_weights