Я хотел бы использовать медианную операцию вместо среднего при оценке моей модели тензорного потока с использованием интерфейса оценщика.
Я использую эту операцию в моей модели:
if mode == tf.estimator.ModeKeys.EVAL:
return tf.estimator.EstimatorSpec(mode=mode, loss=loss,
eval_metric_ops={"accuracy": tf.metrics.mean(my_tensor)})
Я не нашел медианную функцию в пакете tf.metrics для замены tf.metrics.mean. Я могу вычислить это сам, но eval_metric_ops требует кортежа (тензор, update_op), и я не уверен, что должно быть update_op. Как реализовать эту метрику сам?
Спасибо!
редактирование:
Я еще не нашел, как это сделать, но в github tenorflow было обсуждение этого вопроса: https://github.com/tensorflow/tensorflow/issues/5837
Так что я буду использовать вместо этого tf.contrib.metrics.streaming_concat, чтобы вернуть полный массив точности в моем наборе данных eval:
if mode == tf.estimator.ModeKeys.EVAL:
return tf.estimator.EstimatorSpec (mode = mode, loss = loss, eval_metric_ops = {"all_accuracies": tf.contrib.metrics.streaming_concat (my_tensor)})
И используйте numpy для вычисления медианы:
valuation = estimator.evaluate (input_fn = myinput_fn, mode = tf.estimator.ModeKeys.EVAL, steps = None)
печать (np.median (оценка [ 'all_accuracies']))
Я могу получить свою окончательную точность таким образом, но я не увижу ее во время тренировки на тензорной доске, есть идеи, как это сделать?