Почему tf.metric возвращает ноль? - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть такой код.Он рассчитывает среднюю среднюю ошибку двух разных выходов ( контроль и управление ).Я хочу определить метрику, которая объединяет две другие метрики.

import tensorflow as tf

lambda_speed = 0.05

control_mae = tf.metrics.mean_absolute_error(ground_truth_control, predictions_control, weights=weights)
speed_mae = tf.metrics.mean_absolute_error(ground_truth_speed, prediction_speed, name='speed_loss')

mae_total = ((1 - lambda_speed) * nonspeed_mae[0] + lambda_speed * speed_mae[0],
             tf.no_op())

eval_metric_ops = {
    "mae_total": mae_total,
}
tf.estimator.EstimatorSpec(
    mode, predictions=predictions, loss=total_loss, train_op=train_op, eval_metric_ops=eval_metric_ops,
)

Во время отладки я проверил, что данные и прогнозы выглядят хорошо.К сожалению, я получаю mae_total, который равен нулю каждый шаг в каждую эпоху?Почему?

1 Ответ

0 голосов
/ 05 декабря 2018

Если я использую метрики, я должен упомянуть все метрики, используемые в eval_metrics_ops, иначе они не будут запущены tf.estimator.Как это:

import tensorflow as tf

lambda_speed = 0.05

control_mae = tf.metrics.mean_absolute_error(ground_truth_control, predictions_control, weights=weights)
speed_mae = tf.metrics.mean_absolute_error(ground_truth_speed, prediction_speed, name='speed_loss')

mae_total = ((1 - lambda_speed) * nonspeed_mae[0] + lambda_speed * speed_mae[0],
             tf.no_op())

eval_metric_ops = {
    "control_mae": control_mae,
    "speed_mae": speed_mae,
    "mae_total": mae_total,
}
tf.estimator.EstimatorSpec(
    mode, predictions=predictions, loss=total_loss, train_op=train_op, eval_metric_ops=eval_metric_ops,
)
...