我想计算CNTK模型中张量的累积和。这对于序列来说相当简单,但目前还不清楚如何在静态轴上执行此操作。如果你先验地知道轴的维数,你可以想象用一组复杂的gather / reduce_sum / splice操作来做这件事,但这样效率会非常低效。
答案 0 :(得分:3)
这样的操作肯定在我们的待办事项清单上。由于这可以被视为矩阵产品,因此通过以下实现不会太低效:
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