在 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
我想计算 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