Хорошо, так может быть, потому что в ваших попытках TP всегда 0?
Если я попробую это:
y = np.array([0, 0, 0, 0, 0, 1, 1, 1 ,1 ,1])
y_pred = np.array([0.01, 0.005, 0.5, 0.09, 0.56, 0.999, 0.89, 0.987 ,0.899 ,1])
def calculate_tp(y, y_pred):
TP = 0
FP = 0
TN = 0
FN = 0
for i in range(5):
true = K.equal(y, i)
preds = K.equal(y_pred, i)
TP += K.sum(K.cast(tf.boolean_mask(preds, tf.math.equal(true, True)), 'int32'))
FP += K.sum(K.cast(tf.boolean_mask(true, tf.math.equal(~preds, True)), 'int32'))
TN += K.sum(K.cast(tf.boolean_mask(~preds, tf.math.equal(true, True)), 'int32'))
FN += K.sum(K.cast(tf.boolean_mask(true, tf.math.equal(preds, False)), 'int32'))
TP = TP.eval(session=tf.Session())
FP = FP.eval(session=tf.Session())
TN = TN.eval(session=tf.Session())
FN = FN.eval(session=tf.Session())
print(TP, FP, TN, FN)
results = TP / (TP + FN)
return results
res = calculate_tp(y, y_pred)
print(res)
#Outputs :
#0 5 5 5
#1 9 9 9
#1 9 9 9
#1 9 9 9
#1 9 9 9
#0.1
Это даст мне число с плавающей запятой, как вы хотите.
Это помогает?