Я пытаюсь получить все метрики для созданной модели:
def build_rnn_gru_model(tokenizer):
model = tf.keras.Sequential([
tf.keras.layers.Embedding(len(tokenizer.word_index) + 1, 64,input_length=863),
tf.keras.layers.GRU(64, activation='relu', return_sequences=True),
tf.keras.layers.Dense(1, activation='sigmoid')
])
model.summary()
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy',f1,precision, recall])
return model
Я также использовал определения метрик, предложенные в ответе с большим количеством голосов в Как получить точность, F1, точность и отзыв , для модели keras? , но результаты были те же:
def recall(y_true, y_pred):
true_positives = K.sum(K.round(y_pred) * y_true)
possible_positives = K.sum(y_true)
return true_positives / (possible_positives + K.epsilon())
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):
precision_ = precision(y_true, y_pred)
recall_ = recall(y_true, y_pred)
return 2*((precision_*recall_)/(precision_+recall_+K.epsilon()))
При оценке моделей с LSTM
или без повторяющихся слоев все выглядит нормально, но с GRU
повторное значение равно невероятно высокий:
199/1180 [====>.........................] - ETA: 4:45 - loss: 0.3988 - accuracy: 0.8230 - f1: 1.6155 - precision: 0.8195 - recall: 468.6583
может ли кто-нибудь намекнуть, что не так?