Si vous lisez l'article et avez des suggestions, n'hésitez pas à nous contacter. Ce sera encourageant si vous pouvez obtenir un «j'aime».
--ʻEinsum est la ʻ notation d'abréviation Einstein
implémentée dans numpy
et pytorch
. (Je ne savais pas comment l'appeler ainsi en japonais.)
――Il permet d'opérer très intentionnellement des opérations de produit tensoriel compliquées.
--Jusqu'à ce que j'utilise «einsum», j'ai utilisé «torch.bmm» et «torch.matmul» (seulement ceux que je viens de trouver) comme méthode de calcul du produit des tenseurs dans «pytorch». ――Cependant, les dimensions du tenseur sont prédéterminées dans la méthode de calcul du produit mentionnée ci-dessus. (Par exemple, tenseur 3D x tenseur 2D, tenseur 2D x tenseur 1D, etc.) ―― Dans ce cas, il était difficile de vérifier le document un par un et d'utiliser la fonction (méthode) en fonction de la dimension.
Calculs qui ont tendance à être un apprentissage en profondeur
import torch as t
X = t.rand(3,10,5)
Y = t.rand(3,20,5)
Dans un tel cas, je veux calculer le produit de chaque matrice dans le mini-lot et calculer la matrice avec la taille de 10 $ \ times20 $. Et vous voudrez peut-être le retourner sous forme de lot.
t.einsum('bnm,bkm->bnk',X,Y).size()
>> torch.Size([3, 10, 20])
t.einsum('bnm,bkm->bkn',X,Y).size()
>> torch.Size([3, 20, 10])
Vous pouvez également calculer le produit d'une matrice et d'un vecteur. simplement.
X = t.rand(3,10,5)
Y = t.rand(3,5)
t.einsum('bnm,bm->bn',X,Y).size()
>> torch.Size([3, 10])
«En utilisant« einsum », vous pouvez exprimer très facilement le produit de tenseurs complexes. C'est au revoir à ceux qui ont fait correspondre de force les dimensions avec torch.transpose
, torch.view
, torch.squeeze
, etc.
Recommended Posts