如何确保Tensorflow的反向传播正常工作?

时间:2019-05-24 12:04:44

标签: python tensorflow

我写了一个自定义层,它是神经网络的一部分,它包含一些我第一次使用的操作,例如tf.scan和tf.slice。

我可以轻松地测试前向通行是否有效并且有意义,但是我如何知道在必须进行反向传播的情况下它仍然可以在学习期间运行?我可以放心地认为一切都会好起来的,因为我在前传中得到的结果很有意义?

我当时以为可能是创建一个神经网络,用我刚刚创建的自定义层替换一两层,对其进行训练,然后看看会发生什么。但是,尽管这将花费很长时间,但网络可能会在其他层学习,而在我的自定义层中,它可能仍然无法正常工作。

总而言之,我有什么办法可以看到反向传播会很好地工作,并且在这一层的学习过程中我不会有任何问题?

1 个答案:

答案 0 :(得分:0)

据我所知,几乎所有TensorFlow操作都是可区分的,包括tf.abstf.where之类的操作,并且梯度流正确地通过它们。 TensorFlow具有自动微分引擎,该引擎可以获取任何TensorFlow图并计算w.r.t.所需的变量。

因此,如果您的图形由TensorFlow ops组成,那么我就不必担心渐变错误(如果您要发布图层代码,则可以进一步扩展)。但是,仍然存在诸如数值稳定性之类的问题,这些问题可能会使数学上合理的操作在实践中仍然失败(例如,朴素的maxmax计算或通常图中的tf.exp)。除此之外,从用户的角度来看,TensorFlow的区分应该是正确的,并应予以注意。

如果您仍然想手动检查梯度,则可以使用tf.gradients op来计算图形中的导数,这将为您提供所需的梯度,并且您可以手动检查TensorFlow是否进行了微分正确地。 (请参见https://www.tensorflow.org/api_docs/python/tf/gradients