[PYTHON] [Pytorch] Utilisation de l'einsum pour faciliter le produit de matrice (tenseur)

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».

Qu'est-ce que einsum

--ʻ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.

Contexte

--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.

Commentaire

modèle 1

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])

Motif 2

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])

Résumé

«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

[Pytorch] Utilisation de l'einsum pour faciliter le produit de matrice (tenseur)
Calculer le produit des matrices avec une expression de caractère?
[Pytorch] Je souhaite attribuer manuellement les paramètres d'entraînement du modèle
Supplément à l'explication de vscode
L'histoire d'essayer de reconnecter le client
Script pour changer la description de fasta
10 méthodes pour améliorer la précision de BERT
Comment vérifier la version de Django
L'histoire de la mise en place de MeCab dans Ubuntu 16.04
Bases de PyTorch (1) -Comment utiliser Tensor-
Je veux utiliser PyTorch pour générer quelque chose comme les paroles de Japari Park
Changer le bloc de données des données d'achat de pandas (produit ID X) en dictionnaire