我想应用一个适合我的模型的自定义损失函数。
标签是形状为(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]
的函数?
答案 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)