我试图了解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)))
我已经检查过文档,但找不到确切答案。
答案 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