首页 > 解决方案 > 有没有办法测量模型的反向传递?

问题描述

TensorFlow这里已经有一个相关问题:有没有办法测量模型的 FLOPS?

然而,@Tobias Scheck 给出的答案是前向传球数据。

有没有办法测量/估计后向传递?

标签: tensorflowmachine-learningkeras

解决方案


如果您只想快速获得号码,您可以简单地添加

grads = tf.gradients(C, [A, B])

到@Tobias Scheck 的代码来构建梯度计算节点。然后,从原始数字(没有梯度操作)中减去新数字(有梯度操作),以获得估计的失败率。

关于在大型项目中使用此方法的注意事项。该方法使用整个图的静态分析。这有几个问题,包括:

  • while 循环中来自 ops 的触发器只会添加一次。
  • 将添加从未正常运行的操作(某些 TF 功能可能会在图中留下垃圾操作)。
  • 这种分析很大程度上依赖于形状推断。它可能不适用于所有操作。
  • 这种分析依赖于可以估计给定操作的触发器的注册函数。可能存在没有此类功能的操作,并且此类功能不能精确模拟您的 TF 将选择执行操作的实际内核完成的触发器。

有关更多信息,请参阅:https ://github.com/tensorflow/tensorflow/blob/r1.8/tensorflow/core/profiler/g3doc/profile_model_architecture.md

最好将它与实际运行记录 (RunMetadata) 结合使用,或者使用纯粹基于运行时的方法,例如,我可以使用 TensorFlow 测量单个操作的执行时间吗?,并对结果进行一些过滤/聚合。


推荐阅读