Я работаю над моделью нейронной сети с python, используя Keras с бэкэндом TensorFlow.Набор данных содержит две последовательности с результатом, который может быть 1 или 0, а отношение положительных и отрицательных значений в наборе данных составляет от 1 до 9. Модель получает две последовательности в качестве входных данных и выдает вероятность.Сначала в моей модели был слой Dense с одним скрытым модулем и функцией активации сигмоида в качестве вывода, но затем я изменил последний слой модели на Dense с двумя скрытыми модулями и функцией активации softmax и изменил результат моего набора данных с помощью функции Keras to_categorical
.После этих изменений метрики модели, которые содержат Точность, Точность, Напомним, F1, AUC, все равны и имеют высокое и неправильное значение.Вот реализация, которую я использовал для этих метрик
def recall(y_true, y_pred):
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))
recall = true_positives / (possible_positives + K.epsilon())
return recall
def precision(y_true, y_pred):
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))
precision = true_positives / (predicted_positives + K.epsilon())
return precision
def f1(y_true, y_pred):
precisionValue = precision(y_true, y_pred)
recallValue = recall(y_true, y_pred)
return 2*((precisionValue*recallValue)/(precisionValue+recallValue+K.epsilon()))
def auc(y_true, y_pred):
auc = tf.metrics.auc(y_true, y_pred)[1]
K.get_session().run(tf.local_variables_initializer())
return auc
, а вот результат обучения
Epoch 1/5
4026/4026 [==============================] - 17s 4ms/step - loss: 1.4511 - acc: 0.9044 - f1: 0.9044 - auc: 0.8999 - precision: 0.9044 - recall: 0.9044
Epoch 2/5
4026/4026 [==============================] - 15s 4ms/step - loss: 1.4573 - acc: 0.9091 - f1: 0.9091 - auc: 0.9087 - precision: 0.9091 - recall: 0.9091
Epoch 3/5
4026/4026 [==============================] - 15s 4ms/step - loss: 1.4573 - acc: 0.9091 - f1: 0.9091 - auc: 0.9083 - precision: 0.9091 - recall: 0.9091
Epoch 4/5
4026/4026 [==============================] - 15s 4ms/step - loss: 1.4573 - acc: 0.9091 - f1: 0.9091 - auc: 0.9090 - precision: 0.9091 - recall: 0.9091
Epoch 5/5
4026/4026 [==============================] - 15s 4ms/step - loss: 1.4573 - acc: 0.9091 - f1: 0.9091 - auc: 0.9085 - precision: 0.9091 - recall: 0.9091
, после чего я протестировал свою модель, используя predict
, и вычислил метрики, используя склерн precision_recall_fscore_support
функция, и я снова получил тот же результат.все метрики равны и имеют высокое значение (0,93), что неверно на основании созданной мною путаницы
Что я делаю неправильно?