Comment effectuer une multiplication par éléments avec une variable et un tenseur dans PyTorch? Avec deux tenseurs fonctionne bien. Avec une variable et un scalaire fonctionne bien. Mais lors d'une tentative d'effectuer une multiplication élément par élément avec une variable et tenseur je reçois:PyTorch - Multiplication par élément entre une variable et un tenseur?
XXXXXXXXXXX in mul
assert not torch.is_tensor(other)
AssertionError
Par exemple, lors de l'exécution de ce qui suit:
import torch
x_tensor = torch.Tensor([[1, 2], [3, 4]])
y_tensor = torch.Tensor([[5, 6], [7, 8]])
x_variable = torch.autograd.Variable(x_tensor)
print(x_tensor * y_tensor)
print(x_variable * 2)
print(x_variable * y_tensor)
je me attends les première et dernière déclarations d'impression à émission résultats similaires. Les deux premières multiplications fonctionnent comme prévu, avec l'erreur à venir dans le troisième. J'ai essayé les alias de *
dans PyTorch (c'est-à-dire x_variable.mul(y_tensor)
, torch.mul(y_tensor, x_variable)
, etc.).
Il semble que la multiplication par éléments entre un tenseur et une variable ne soit pas supportée étant donné l'erreur et le code qui la produit. Est-ce correct? Ou y a-t-il quelque chose qui me manque? Je vous remercie!
Connaissez-vous le raisonnement derrière ce choix d'implémentation dans PyTorch? Plus précisément, pourquoi le tenseur n'est-il pas traité comme le scalaire? Dans les deux cas, on sait que les gradients ne sont pas nécessaires, alors pourquoi la multiplication n'est-elle pas permise directement? En tout cas, merci pour la réponse! – golmschenk
La plupart des opérations existent deux fois dans PyTorch, elles sont implémentées une fois pour les Tensors et une fois pour les Variables. Les opérations sur les variables nécessitent une méthode arrière. Par conséquent, les opérations non différentiables ne sont pas prises en charge par les variables, mais vous pouvez les appliquer aux tenseurs. Je pense qu'ils voulaient garder ces deux fils séparés pour cette raison. Et les opérations scalaires sur les variables sont simplement implémentées pour plus de commodité. – mexmex