我将Precision @ K作为Keras中的自定义指标。根据{{3}}
import keras.backend as K
def mean_pred(y_true, y_pred):
return K.mean(y_pred)
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy', mean_pred])
我只需要使用Keras后端计算一个函数,然后在编译步骤传递它即可。
使用Numpy
只能计算precision @ k,如下例所示:
def precisionatk(y_true,y_pred,k)
precision_average = []
idx = (-y_pred).argsort(axis=-1)[:,:k]
for i in range(idx.shape[0]):
precision_sample = 0
for j in idx[i,:]:
if y_true[i,j] == 1:
precision_sample += 1
precision_sample = precision_sample / k
precision_average.append(precision_sample)
return np.mean(precision_average)
y_true = np.array([[0,0,1,0],[1,0,1,0]])
y_pred = np.array([[0.1,0.4,0.8,0.2],[0.3,0.2,0.5,0.1]])
print(precisionatk(y_true,y_pred,2))
0.75
那么,如何将其翻译为Keras后端?
编辑:我正在处理一个多标签问题,并且y_true始终是一个具有1或0的数组,并且y_prediction每个类的概率。