你好Stackoverflow社区!

我想知道一个简单的想法,以减少关于训练前馈神经网络的特定问题的内存需求(与我的另一个问题有关:OOM computing gradients for deep neural net.) .

假设我有一个用张量流定义的图,实现了多感知器和损失函数的计算 . 在初始化变量等之后,我通过将输入馈送到该图中来计算前向传递,从而获得一些输出值 . 我将输出值存储在列表中 . 之后,我使用前一个输出作为新输入执行另一个前向传递,并再次保存新输出值 . 我可以多次重复这个过程,实现一种通过深度神经网络的前向传递 . 我会称这样的重复步骤为k . 我做了整体K这样的步骤 .

对于最后两个计算步骤,图像propagation between steps将这个想法放到了前面 .

我现在的目标是,计算所有这些步骤中错误的向后传递 .

意图是,为每个步骤存储计算的梯度,但不直接应用 .

我可以使用保存的值重新计算每个步骤的激活 .

在最后一步中,可以使用train_op.compute_gradients(loss)op直接从定义的损失函数获得梯度,使用用户定义的步骤K的目标和为步骤K-1保存的最后一个输出值 .

现在我希望能够使用像tf.gradients(loss,[input_vars])之类的东西来计算渐变w.r.t.输入 . 我可以将该梯度添加到步骤K-1的输出值,并使用该和作为用于评估步骤K-1的损失函数的目标值,再次使用步骤K-2的输出作为输入值 .

换句话说:损失的梯度-Fct w.r.t.输入提供有关上一步骤中的输出应如何更改的信息 .

这个想法是以某种方式实现的,还是已经有方法通过断开计算图之间的中间值来进行这种反向传播?

或者是我要求/写完全废话? (对我来说,实际上很难把它写成文字......)

感谢您的时间!