Я реализовал пользовательскую метрику, показанную на этой странице (CatgoricalTruePositives) https://www.tensorflow.org/alpha/guide/keras/training_and_evaluation
Я думаю, что она полна ошибок, в ней есть некоторые высказывания (#fix this).В любом случае, вот что особенно не так в этом.Точность NN приближается к 99%, но этот показатель говорит:
binary_true_positives: 8459.0000
(как показано на сайте тоже).Если количество выборок в MNIST составляет 50000, то как минимум 45 тысяч из них должны быть истинно положительными.Что пошло не так с их простым примером пользовательской метрики?
Ради полноты вот их пример:
class CatgoricalTruePositives(keras.metrics.Metric):
def __init__(self, name='binary_true_positives', **kwargs):
super(CatgoricalTruePositives, self).__init__(name=name, **kwargs)
self.true_positives = self.add_weight(name='tp', initializer='zeros')
def update_state(self, y_true, y_pred, sample_weight=None):
y_pred = tf.argmax(y_pred)
values = tf.equal(tf.cast(y_true, 'int32'), tf.cast(y_pred, 'int32'))
values = tf.cast(values, 'float32')
if sample_weight is not None:
sample_weight = tf.cast(sample_weight, 'float32')
values = tf.multiply(values, sample_weight)
return self.true_positives.assign_add(tf.reduce_sum(values)) # TODO: fix
def result(self):
return tf.identity(self.true_positives) # TODO: fix
def reset_states(self):
# The state of the metric will be reset at the start of each epoch.
self.true_positives.assign(0.)