Я хотел бы понять, когда тензор потока выделяет память для повторяющихся операций.
Предположим, у меня есть периодическая операция f()
. Насколько я знаю, существует три распространенных способа реализации прямого прохода:
1) Развернуть график
x_prev = ...
for t in range(T):
x = f(x_prev)
x_prev = x
2) Использовать цикл python:
data = {}
x = tf.placeholder(...)
data[x] = ...
for t in range(T)
x_next = sess.run(f(x), feed_dict=data)
data[x] = x_next
3) Использование tf.while_loop
:
i = tf.constant(0)
c = lambda i, x: i < T
b = lambda i, x: i, f(x)
r = tf.while_loop(c, b, [i, x])
Для backprop предположим, что
- есть потери, связанные с итерацией;
- следующий
x
подается с tf.stop_gradient
.
Для 1) и 2), тензорный поток выделит память для всех операций в развернутом графе, или он выяснит, использовать только одну итерацию, как в 3)?
Любые ссылки на официальные документы приветствуются.