tf.keras.metrics.Metric
| Просмотреть исходный код на GitHub |
Инкапсулирует логику и состояние метрики.
Наследуется от: Layer
tf.keras.metrics.Metric(
name=None, dtype=None, **kwargs
)
Использование:
m = SomeMetric(...)
for input in ...:
m.update_state(input)
print('Final result: ', m.result().numpy())
Использование с API tf.keras:
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(64, activation='relu'))
model.add(tf.keras.layers.Dense(64, activation='relu'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
model.compile(optimizer=tf.compat.v1.train.RMSPropOptimizer(0.01),
loss=tf.keras.losses.categorical_crossentropy,
metrics=[tf.keras.metrics.CategoricalAccuracy()])
data = np.random.random((1000, 32))
labels = np.random.random((1000, 10))
dataset = tf.data.Dataset.from_tensor_slices((data, labels))
dataset = dataset.batch(32)
dataset = dataset.repeat()
model.fit(dataset, epochs=10, steps_per_epoch=30)
Для реализации подклассами:
-
__init__(): Все переменные состояния должны быть созданы в этом методе, вызвавself.add_weight()подобно:self.var = self.add_weight(...) -
update_state(): Содержит все обновления переменных состояния, например: self.var.assign_add(...). -
result(): Вычисляет и возвращает значение метрики из переменных состояния.
Пример реализации подкласса:
class BinaryTruePositives(tf.keras.metrics.Metric):
def __init__(self, name='binary_true_positives', **kwargs):
super(BinaryTruePositives, 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_true = tf.cast(y_true, tf.bool)
y_pred = tf.cast(y_pred, tf.bool)
values = tf.logical_and(tf.equal(y_true, True), tf.equal(y_pred, True))
values = tf.cast(values, self.dtype)
if sample_weight is not None:
sample_weight = tf.cast(sample_weight, self.dtype)
sample_weight = tf.broadcast_weights(sample_weight, values)
values = tf.multiply(values, sample_weight)
self.true_positives.assign_add(tf.reduce_sum(values))
def result(self):
return self.true_positives
Методы
add_weight
add_weight(
name, shape=(), aggregation=tf.VariableAggregation.SUM,
synchronization=tf.VariableSynchronization.ON_READ, initializer=None, dtype=None
)
Добавляет переменную состояния. Только для использования подклассами.
reset_states
reset_states()
Сбрасывает все переменные состояния метрики.
Эта функция вызывается между эпохами/шагами, когда метрика оценивается во время обучения.
result
@abc.abstractmethod result()
Вычисляет и возвращает тензор значения метрики.
Вычисление результата — это идемпотентная операция, которая просто вычисляет значение метрики с использованием переменных состояния.
update_state
@abc.abstractmethod
update_state(
*args, **kwargs
)
Накапливает статистику для метрики.
Примечание: Эта функция выполняется как функция графа в режиме графа. Это означает: а) Операции с одним и тем же ресурсом выполняются в текстовом порядке. Это должно упростить выполнение таких действий, как добавление обновленного значения переменной к другой, например. б) Вам не нужно беспокоиться о сборе операторов обновления для выполнения. Все операторы обновления, добавленные в граф этой функцией, будут выполнены. В результате код в целом должен работать одинаково с выполнением в режиме графа или с жадным выполнением.
Пожалуйста, используйте tf.config.experimental_run_functions_eagerly(True) для выполнения этой функции жадно для отладки или профилирования.
| Аргументы | |
|---|---|
*args | |
**kwargs | Мини-пакет входных данных для метрики. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/keras/metrics/Metric