зависимость управления тензорным потоком

#python #tensorflow #metrics

#python #тензорный поток #показатели

Вопрос:

Я пытаюсь запустить очень простой пример кода, который я нашел в Интернете:

     with graph.as_default():
        with sess.as_default():

            labels = tf.constant([[[1.0, 0.0], [0.0, 1.0], [0.0, 1.0]]])
            predictions = tf.constant([[[1.0, 0.0], [0.0, 1.0], [0.0, 1.0]]])

            t = 0.5
            y_pred_ = tf.to_int32(predictions > t)
            score, up_opt = tf.metrics.mean_iou(labels, y_pred_, 3)
            with tf.control_dependencies([up_opt]):
                score_2 = 1.0 * score
            sess.run([tf.local_variables_initializer()])
            result = sess.run([score_2])
  

Предполагается, что это даст мне среднее значение iou этого фиктивного примера. Однако, если я запускаю это несколько раз, я получаю разные результаты. Я заметил, что запуск up_opt вручную исправляет это:

     with graph.as_default():
        with sess.as_default():

            labels = tf.constant([[[1.0, 0.0], [0.0, 1.0], [0.0, 1.0]]])
            predictions = tf.constant([[[1.0, 0.0], [0.0, 1.0], [0.0, 1.0]]])

            t = 0.5
            y_pred_ = tf.to_int32(predictions > t)
            score, up_opt = tf.metrics.mean_iou(labels, y_pred_, 3)
            sess.run([tf.local_variables_initializer()])
            sess.run([up_opt])
            result = sess.run([score])
  

Однако мне интересно, почему control_dependencies не работает. Разве это не должно автоматически запускать операторы?

Комментарии:

1. Во втором фрагменте кода score_2 не определено. Вы хотели добавить score_2 = 1.0 * score туда без with инструкции? Используете ли вы TF 1.15?

2. Это была опечатка. Я намеревался sess.run([score]) . Я обновил свой вопрос. Я использую tensorflow 1.14