Wenn Sie den Artikel lesen und Vorschläge haben, können Sie sich gerne an uns wenden. Es wird ermutigend sein, wenn Sie ein "Gefällt mir" bekommen können.
--einsum
ist Einsteins Abkürzungsnotation
, die in numpy
und pytorch
implementiert ist. (Ich wusste nicht, wie ich es auf Japanisch so nennen sollte.)
――Es ermöglicht es, komplizierte Tensorproduktoperationen sehr absichtlich durchzuführen.
einsum
verwendet haben, haben Sie torch.bmm
oder torch.matmul
(nur die, die Sie gerade erfunden haben) als Methode zur Berechnung des Tensorprodukts in pytorch
verwendet.
――Die Abmessungen des Tensors werden jedoch in der oben genannten Produktberechnungsmethode vorgegeben. (Zum Beispiel 3D-Tensor x 2D-Tensor, 2D-Tensor x 1D-Tensor usw.)
――In diesem Fall war es schwierig, das Dokument einzeln zu überprüfen und die Funktion (Methode) entsprechend der Dimension zu verwenden.Berechnungen, die dazu neigen, tief zu lernen
import torch as t
X = t.rand(3,10,5)
Y = t.rand(3,20,5)
--Mini Batch ist $ 3 $
In einem solchen Fall möchte ich das Produkt jeder Matrix in der Mini-Charge berechnen und die Matrix mit der Größe von $ 10 \ times20 $ berechnen. Und Sie können es als Stapel zurückgeben.
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])
Sie können auch das Produkt einer Matrix und eines Vektors berechnen. einfach.
X = t.rand(3,10,5)
Y = t.rand(3,5)
t.einsum('bnm,bm->bn',X,Y).size()
>> torch.Size([3, 10])
einsum
können Sie das Produkt komplexer Tensoren sehr einfach ausdrücken. Dies ist ein Abschied von denen, die die Abmessungen zwangsweise mit "torch.transpose", "torch.view", "torch.squeeze" usw. abgeglichen haben.Recommended Posts