2016-09-07 2 views
2

Я прочитал здесь вопрос TensorFlow - get current value of a Variable и ответ оставил меня смущенным.Какая модель кэширования использует TensorFlow?

С одной стороны, DGA говорит: «И очень ясно:. Запуск переменная будет производить только текущее значение переменной, она не будет запускать любые присвоению операции, связанные с ним Это дешево.»

С другой стороны, Сальвадор Дали говорит: «@dga да, если переменная зависит от других переменных, они также должны быть оценены».

Итак, что это? Оценивает ли переменная только текущее значение или же оно пересчитывает его значение с нуля из переменных, от которых это зависит ?

Что произойдет, если я буду оценивать одну и ту же переменную дважды подряд? Does Tensorflow имеет какое-либо понятие «устаревших» переменных, то есть переменные, которые нуждаются в перерасчете, потому что их зависимости действительно изменились (например, в системе построения )?

Я спрашиваю, потому что я работаю с несколькими сетями, где частичный вывод одного net становится частичным вводом другой сети. Я хочу получить градиенты , вычисленные на входном уровне одной сети, и слияние + применить их к выходному уровню другой сети. Я надеялся сделать это вручную , получая/сохраняя градиенты в переменных графа, а затем работает с графическими операциями для обратного распространения градиентов. Таким образом, мне нужно понять, как все это работает под капотом.

Что я похож на этот How to use Tensorflow Optimizer without recomputing activations in reinforcement learning program that returns control after each iteration?, но я не могу сделать вывод, можно ли на основе последнего ответа (экспериментальная поддержка теперь?)

Спасибо!

ответ

2

@dga является правильным. Если вы передадите объект tf.Variable в tf.Session.run(), TensorFlow вернет текущее значение переменной и не выполнит никаких вычислений. Это дешево (стоимость копии памяти или, возможно, передача сети в случае распределенной настройки TensorFlow). TensorFlow не сохраняет истории * о том, как обновлялось значение tf.Variable, поэтому оно не может в целом перепроверить его значение с нуля.


(* Технически TensorFlow помнит tf.Tensor, который был использован для инициализации каждой переменной, поэтому можно пересчитывать щёток значение переменной.)

+0

ОК, все в кэше. Спасибо. –

Смежные вопросы