kerasにおけるmetricsについて
現在,深層学習について勉強しており,学習時にAccuracyの他にPrecisionやRecall,F-measureについて表示させたいと思っております.
現在扱っているのはマルチラベル分類問題であり,300個のクラスに対して適合するものに1を立て,そうでないものには0を立てるような出力を期待しています.
y_true.shapeは[3395,300]です.
3395は各データであり,300はそのデータに対するラベルになります.
def P(y_true, y_pred):
true_positives = K.sum(K.cast(K.greater(K.clip(y_true * y_pred, 0, 1), 0.2), 'float32'), axis=0)
pred_positives = K.sum(K.cast(K.greater(K.clip(y_pred, 0, 1), 0.2), 'float32'), axis=0)
precision = K.mean(true_positives / (pred_positives + K.epsilon()) )
return precision
#ミニバッチ単位でのrecallの平均
def R(y_true, y_pred):
true_positives = K.sum(K.cast(K.greater(K.clip(y_true * y_pred, 0, 1), 0.2), 'float32'), axis=0)
poss_positives = K.sum(K.cast(K.greater(K.clip(y_true, 0, 1), 0.2), 'float32'), axis=0)
recall = K.mean(true_positives / (poss_positives + K.epsilon()))
return recall
#ミニバッチ単位でのf-measureの平均
def F(y_true, y_pred):
p_val = P(y_true, y_pred)
r_val = R(y_true, y_pred)
f_val = 2*p_val*r_val / (p_val + r_val)
return f_val
現在自作した関数はこのようになっておりますが,Accuracyは1.000なのに,PrecisionとRecallは0.01程度が表示されており,実際には考えにくい状態になっております.
どの部分で間違えているか,教えていただけますと幸いです.
よろしくお願い致します.