我正在尝试应用一个适合我的模型的自定义损失函数。标签是一个形状为(5,)的二进制数组,数组中1的位置很重要。例如[1,0,0,0,0]
是y_true
。如果y_pred
为[0,0,1,0,0]
,其损失将高于y_pred
为[0,0,0,0,1]
的情况。
以下是初步的函数代码:
from keras import backend as Kdef 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]
我知道这个函数完全错误,但基本思路是正确的。我该如何编写一个可以直接用于model.compile()
的函数?
回答:
你可能在寻找class_weight
,这是你传递给fit
的一个参数:
weights = {0:1, 1:2, 2:3, 3:4, 4:5}model.fit(X, Y, ..., class_weight=weights)
如果你仍然想要那个损失函数: