Работает ли autodiff в тензорном потоке, если в построении моего графа участвует цикл for?

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

Короче говоря, мне нужно использовать цикл. Теперь я вижу, что в tenorflow определен только цикл while, а цикла for нет. Итак, мой вопрос: если я использую простой стиль Python для цикла для выполнения операций над моим тензорным, не сможет ли AutoDiff рассчитать градиенты в моем графике?

1 ответ

Решение

Tensorflow не знает (поэтому не заботится) о том, как был построен граф, вы даже можете писать каждый узел вручную, если для этого используете надлежащие функции. Так что, в частности, цикл не имеет ничего общего с TF. С другой стороны, цикл TF while дает вам возможность выражать динамические вычисления внутри графа, поэтому, если вы хотите обрабатывать данные в последовательности и вам нужен только текущий в памяти - только тогда, когда цикл может этого добиться. Если вы вручную создадите огромный граф (через цикл), он всегда будет выполняться, и все будет храниться в памяти. Пока это подходит для вашей машины, вы должны быть в порядке. Другое дело динамическая длина, если иногда вам нужно запустить цикл 10 раз, а иногда 1000, вы должны использовать tf.while_loop, вы не можете сделать это с помощью цикла for (если вы не создадите отдельные графики для каждой возможной длины).

Другие вопросы по тегам