Je voudrais calculer la somme cumulative d'un tenseur dans un modèle CNTK. Ceci est raisonnablement simple à faire pour les séquences, mais on ne sait pas comment le faire sur les axes statiques. Si l'on connaît a priori la dimensionnalité de l'axe, on pourrait le faire avec un ensemble compliqué d'opérations gather/reduce_sum/splice, mais ce serait ridiculement inefficace.Calculer la somme cumulative sur l'axe statique dans CNTK
1
A
Répondre
1
Des opérations comme celle-ci sont définitivement sur notre liste de choses à faire. Puisque ceci peut être étalé en tant que produit matriciel, il ne sera pas trop inefficace avec la mise en œuvre suivante:
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