У меня есть трехклассовый классификатор, который реализован в керасе. (0, 1, 2) Я хочу получить показатель точности для каждой тренировки, поэтому я определил функцию metri c следующим образом:
def precision_pos(y_true, y_pred):
# Calculates the precision
true_positives = K.sum(K.cast(K.round(y_true * y_pred)==1, dtype='float32'))
predicted_positives = K.sum(K.cast(K.round(y_pred)==1, dtype='float32'))
precision = true_positives / (predicted_positives + K.epsilon())
return precision
def precision_neg(y_true, y_pred):
true_neg = K.sum(K.cast(K.round(y_true * y_pred)==4, dtype='float32'))
predicted_neg = K.sum(K.cast(K.round(y_pred)==2, dtype='float32'))
print(true_neg)
print(predicted_neg)
precision_neg = true_neg / (predicted_neg + K.epsilon())
return precision_neg
def precision_neu(y_true, y_pred):
true_neu = K.sum(K.cast(K.round(y_true * y_pred)==0, dtype='float32'))
predicted_neu = K.sum(K.cast(K.round(y_pred)==0, dtype='float32'))
print(true_neu)
print(predicted_neu)
precision_neu = true_neu / (predicted_neu + K.epsilon())
return precision_neu
Я думаю, что первая функция работала хорошо, но две другие не , пожалуйста, смотрите вывод:
512/512 [==============================] - 4s 8ms/sample - loss: 7.2359 - precision_pos: 0.4674 - precision_neg: 0.0000e+00 - precision_neu: 2.8859
Train on 512 samples
512/512 [==============================] - 1s 3ms/sample - loss: 8.7310 - precision_pos: 0.5264 - precision_neg: 0.0000e+00 - precision_neu: 80000008.0000
Train on 512 samples
512/512 [==============================] - 2s 3ms/sample - loss: 7.1996 - precision_pos: 0.2750 - precision_neg: 0.6720 - precision_neu: 600000000.0000
Train on 512 samples
512/512 [==============================] - 2s 3ms/sample - loss: 9.9930 - precision_pos: 0.1250 - precision_neg: 10625000.0000 - precision_neu: 640000000.0000
Train on 512 samples
512/512 [==============================] - 2s 3ms/sample - loss: 7.7442 - precision_pos: 0.0625 - precision_neg: 8750000.0000 - precision_neu: 640000000.0000
Train on 512 samples
512/512 [==============================] - 1s 3ms/sample - loss: 9.3498 - precision_pos: 0.0000e+00 - precision_neg: 10625000.0000 - precision_neu: 640000000.0000
Train on 512 samples
512/512 [==============================] - 2s 3ms/sample - loss: 9.4443 - precision_pos: 0.0000e+00 - precision_neg: 5625000.0000 - precision_neu: 640000000.0000
Может кто-нибудь помочь в этом? я думаю, что внутренний продукт == 4 - это класс '2', прогнозирующие выборки скважины, pred == 2 - это все прогнозируемые 2 выборки, так что он не будет больше 1, верно? Спасибо всем