что означает `control_flow_ops.with_dependencies` для tensoflow?

Я читаю код модели тензорного потока: https://github.com/tensorflow/models/blob/master/slim/train_image_classifier.py

Я очень смущен этой частью кода:

train_tensor = control_flow_ops.with_dependencies([update_op], total_loss,
                                                  name='train_op')

Что означает control_flow_ops.with_dependencies?


person tidy    schedule 28.03.2017    source источник


Ответы (2)


Функция имеет два аргумента control_flow_ops.with_dependencies(dependencies, output_tensor). Второй аргумент output_tensor, который в вашем случае равен total_loss, оценивается только после оценки всех операций в dependencies. Как следует из названия, output_tensor зависит от зависимостей для правильной оценки. Эта функция обеспечивает это поведение.

Зависимости - это итерация операций, в вашем случае одна update_op в списке.

person vega    schedule 28.03.2017
comment
Спасибо @vega. Другой вопрос: являются ли train_tensor и total_loss одним и тем же тензором? - person tidy; 29.03.2017
comment
Да, функция указывает: Создает содержимое output_tensor только после dependencies... Возвращает то же, что и output_tensor. - person vega; 29.03.2017

Во-первых, with_dependencies устарело, вместо этого используйте tf.control_dependencies.

Что касается того, что он делает, он выводит некоторое значение только после вычисления зависимостей. Обычно я использую его для утверждения некоторых ценностей. Например:

assert_op = tf.Assert(tf.less_equal(tf.reduce_max(x), 1.), [x]) # max(x) <= 1
with tf.control_dependencies([assert_op]):
    x= tf.identity(x)
person Salvador Dali    schedule 10.10.2018