2017-10-04 4 views
1

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

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