現在,深層学習について勉強しており,学習時に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程度が表示されており,実際には考えにくい状態になっております.
どの部分で間違えているか,教えていただけますと幸いです.
よろしくお願い致します.