在 CNTK 中计算跨静态轴的累积和

Calculate cumulative sum across static axis in CNTK

我想计算 CNTK 模型中张量的累加和。这对序列来说相当简单,但不清楚如何在静态轴上做到这一点。如果一个人先验地知道轴的维数,你可以想象用一组复杂的 gather/reduce_sum/splice 操作来做到这一点,但这将是非常低效的。

像这样的操作肯定在我们的待办事项列表中。由于这可以表示为矩阵乘积,因此通过以下实现不会太低效:

def cumsum(x, axis=-1):
   d = x.shape[axis]
   U = C.constant(np.triu(np.ones((d,d))).astype(x.dtype))
   if axis != -1:
      x = C.swapaxes(x, -1, axis)
   z = C.times(x, U)
   if axis != -1:
      z = C.swapaxes(z, -1, axis)
   return z