为什么在张力流中进行回合的反向传播分为两个操作



我试图用C 和CUDA在Tensorflow中实现自定义卷积操作,我发现Tensorflow中Conv2D的后传播是通过两个单独的操作实现的。确实,我发现有两个操作实现,即cons_grad_filter_ops.cc和conv_grad_input_ops.cc在TensorFlow源代码中,这意味着分别计算过滤器和输入的梯度。我可以问一下此实施背后的想法是什么?为什么它们不简单地合并为一个单一操作?

好吧,我进行了一个测试,发现如果将不同输入的背面传播分为不同的TF OPS,则大约有30%的速度提升,而包裹在一个TF中。这反对直觉,也许与TF的体系结构有关。注意:我的测试是基于带有库拉斯而不是cudnn的cuda im2col/col2im。

最新更新