Идет Сессия.выполнения(выборки) гарантированно выполнить его "выбирает" аргументы в порядке?
Гарантируется ли Session.run(fetches, feed_dict) выполнение его аргументов fetches в порядке?
В документации об этом, кажется, ничего не говорится.
Например, если вы запускаете
sess.run([accuracy, train_op], feed_dict=feed_dict)
Порядок выполнения имеет значение: train_op обновит параметры, влияющие на accuracy.
2 ответов:
Нет. По умолчанию, Tensorflow является бесплатным для оценки операторов в любом порядке. Из-за параллелизма этот порядок может даже меняться между запусками. Это обычно хорошо, потому что это означает, что Tensorflow может оптимально использовать имеющееся оборудование. Это может быть проблематично, если код изменяет состояние, например переменные.
Однако, если по какой-то причине вы хотите контролировать порядок вычислений, в общем случае вы можете использовать зависимости управления для обеспечения порядка между операторами. Контроль зависимости задокументированы здесь:
Https://www.tensorflow.org/api_docs/python/tf/Graph#control_dependencies
Надеюсь, это поможет!
После публикации этого и во время обсуждения в
Возможно ли получить значение целевой функции на каждом этапе обучения?
Я заметил, что порядок выполнения не определен. Например, рассмотрим следующий код:import tensorflow as tf x = tf.Variable(0, dtype=tf.float32) loss = tf.nn.l2_loss(x-1) train_opt = tf.train.GradientDescentOptimizer(1) train_op = train_opt.minimize(loss) init_op = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init_op) print sess.run([x, train_op])С TensorFlow 1.1, если переменная окружения
CUDA_VISIBLE_DEVICESустановлена в один из графических процессоров, то выводится[0.0, None]И если он установлен в
"", этот код выводит[1.0, None]К сожалению, я ничего не вижу в документации указание порядка выполнения или предупреждение пользователей о том, что он не определен.
Comments