有人知道如何在TensorFlow中将反向传播的错误传递给每一层吗?

时间:2018-02-18 05:14:11

标签: tensorflow

在正向程序之后,为批处理数据生成了一个丢失和一个错误。然后根据链规则,将错误反向传播到先前的层以更新每个层中的参数。假设我有以下网络架构:

 I->(W1)->C1->(W2)->C2->(W3)->O

I是输入,O是输出,W1,W2,W3是3层的权重。 C1C2是前两个图层的输出。使用O和基本事实,我们获得了将被反向传播的损失和错误。我的问题是:在TensorFlow中,是否有任何方法可以将错误反向传播到C1C2

我知道我们可以按如下方式获取参数运算符:

W1_op = tf.get_default_graph().get_tensor_by_name('W1')
W1_op = ...

我的最终目的是检查我的网络中的错误是否正确,因为我无法检查是否正确计算了此网络的某个特定层(新的用户定义操作)中的梯度。我想通过检查此图层之前和之后的错误来检查其渐变(通过查看错误并比较错误)。

我知道我们可以使用tf.test.check_gradient进行渐变检查,但似乎这个新运算符的梯度检查输出取决于输入。在某些情况下,可以接受梯度检查(即,理论梯度和数值梯度非常接近地通过阈值评估,例如1e-3),但在某些其他情况下,梯度检查可能会失败,这取决于关于那个操作的参数。 请看图。 x-axis(对数标度)是参数,y-axis是计算的梯度和评估的梯度之间的差异。如图所示,在某些参数配置中,差异非常小,但在其他情况下,梯度检查将失败。

fig

因此,我不确定这是否适合学习是好的还是有效的。

在Caffe框架中,似乎errors的每个图层都保存在diff内存中。我想在每一层中获得这些反向传播的errors。有人知道怎么做吗?

0 个答案:

没有答案