keras制作自定义损失函数

时间:2018-07-23 16:07:48

标签: machine-learning keras deep-learning

我想应用一个适合我的模型的自定义损失函数。 标签是形状为(5,)的二进制数组,数组中1的位置很重要。例如[1,0,0,0,0]y_true。与y_pred相比[0,0,1,0,0]的损失要比y_pred的{​​{1}}高。

朴素的功能如下:

[0,0,0,0,1]

我知道此功能是完全错误的,但是想法就在那里。如何编写可以直接放入from keras import backend as K def tf_loss_function(y_true, y_pred): y_pred = K.clip(y_pred, _Epsilon, 1.0-_Epsilon) true = 0 pred = 0 tf_session = K.get_session() y_true = y_true.eval(tf_session()) y_pred = y_pred.eval(tf_session()) shape = y_true.shape for row in range(shape[0]): for elem in range(shape[1]): true += y_true[elem] * elem pred += y_true[elem] * elem return ((true - pred) ** 2)/shape[0] 的函数?

1 个答案:

答案 0 :(得分:0)

您可能正在寻找class_weight,这是您传入fit的参数:

weights = {0:1, 1:2, 2:3, 3:4, 4:5}
model.fit(X, Y, ..., class_weight=weights)

如果您仍然想要损失函数:

import keras.backend as K

def custom_loss(true,pred):

    weights = K.variable([[1,2,3,4,5]])
    return K.mean(K.square((true-pred)*weights))

model.compile(... , loss =custom_loss)