Keras:将损失计算为跨数据点的*中值*而不是平均值

sam*_*mjk 5 optimization deep-learning keras

Keras损失页说,如果我们有一个自定义的损失函数,则“实际的优化目标是平均在所有数据点的输出数组的。” 有什么方法可以优化所有数据点(而不是平均值)的输出数组的中值

OlD*_*Dor 3

为了做到这一点,你需要进入张量流级别

import keras
import tensorflow


def pick_median(arg_tensor):
    the_upper_tensor = tensorflow.contrib.distributions.percentile(arg_tensor, 50, interpolation='higher')
    the_lower_tensor = tensorflow.contrib.distributions.percentile(arg_tensor, 50, interpolation='lower')

    final_tensor = (the_upper_tensor + the_lower_tensor) / 2
    # print(the_count.eval(session=keras.backend.get_session()))

    return final_tensor
Run Code Online (Sandbox Code Playgroud)

比方说,以下是定义median_squared_error损失函数的方式:

def median_squared_error(arg_y_true,
                         arg_y_pred):
    final_tensor = keras.backend.square(arg_y_pred - arg_y_true)
    final_tensor = pick_median(arg_tensor=final_tensor)
    return final_tensor
Run Code Online (Sandbox Code Playgroud)