m,n =size(l.x)
for batch=1:m
l.ly = l.y[batch,:]
l.jacobian .= -l.ly .* l.ly'
l.jacobian[diagind(l.jacobian)] .= l.ly.*(1.0.-l.ly)
# # n x 1 = n x n * n x 1
l.dldx[batch,:] = l.jacobian * DLDY[batch,:]
end
return l.dldx
l.x
est une matrice m
par n
. l.y
est une autre matrice de la même taille que l.x
. Mon but est de créer une autre matrice m
par n
, l.dldx
, dans laquelle chaque ligne est le résultat de l'opération à l'intérieur de la boucle for. Quelqu'un peut-il repérer une optimisation supplémentaire pour ce bloc de code? Le code ci-dessus fait partie de https://github.com/stevenygd/NN.jl.Existe-t-il un moyen de refactoriser le code julia ci-dessous afin d'éviter la boucle/malloc?
L'intégration du calcul dans un couple de boucles 'for' le ramène à 2 allocations et donne * une autre amélioration de la vitesse 5x *. C'est trivial, mais je vais ajouter le code si demandé. –
Veuillez également ajouter les codes! Vous êtes un dieu dans la performance de Julia. –
Pouvez-vous également expliquer comment vous refactoriser l'ensemble du bloc de codes à une seule ligne? Je ne comprends pas où dans votre code avez-vous calculé les entrées diagonales de la matrice jacobienne. –