它使用自动区分。它使用链式规则并在图中分配梯度的反向词。
假设我们有一个张量C,这个张量C是在一系列操作之后得到的。例如,通过加,乘,经历一些非线性等
因此,如果此C依赖于称为Xk的某些张量集,则需要获取梯度
Tensorflow始终跟踪操作路径。我的意思是节点的顺序行为以及它们之间的数据流向。这是通过图形完成的
如果需要获取X输入的成本的导数,这首先要做的是通过扩展图来加载从X输入到成本的路径。
然后从河流开始。然后使用链式规则分布梯度。(与反向传播相同)
如果您阅读源代码属于tf.gradients()的任何方式,您都可以发现tensorflow已经很好地完成了此梯度分布部分。
当回溯tf与图交互时,在TF中,回传遍历TF将遇到不同的节点在这些节点内,有我们称为(ops)matmal,softmax,relu,batch_normalization等操作,所以tf所做的是将这些ops自动加载到图形
这个新节点构成了操作的偏导数。get_gradient()
让我们来谈谈这些新添加的节点
在这些节点内,我们将2加1。导数,计算出ierier)2。
因此,根据链式规则,我们可以计算
这就像Backword API一样
所以张量流总是考虑图的顺序以进行自动微分
因此,正如我们所知道的,我们需要前向传递变量来计算梯度,然后我们需要将中间值也存储在张量中,这可以减少内存。对于许多操作而言,他们知道如何计算梯度并分配梯度。