0
votes

Conversion d'une liste des listes et des scalaires vers une liste des tenseurs Pytorch

Je convertitais une liste de listes en un tenseur Pytorch et j'ai reçu un message d'avertissement. La conversion elle-même n'est pas difficile. Par exemple:

home/user1/files/module.py:1: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).


2 commentaires

J'ai essayé de reproduire votre avertissement mais j'ai échoué à le faire, à l'aide de vos codes Thing_tensor a produit une liste de tenseur sans me donner un avertissement. Pourriez-vous fournir la version Pytorch que vous utilisez?


Le code que vous n'avez pas produit cette erreur - vous étions peut-être réellement en cours de code? :)


3 Réponses :


2
votes

J'ai essayé de reproduire votre avertissement mais j'ai échoué. Cependant, je pourrais obtenir le même avertissement en créant si j'ai remplacé les listes dans chose code> par tensors.

Je vais continuer pourquoi il est préférable d'utiliser x.clone (). détacher () code> plutôt que torche.tensor (x) code> pour effectuer une copie: p>

sur ma version de pytorch à l'aide de torche.tensor code> Travaillera pour créer une copie qui n'est plus liée au graphique informatique et qui n'occupe pas le même endroit en mémoire. Cependant, ce comportement pourrait changer dans les versions futures, c'est pourquoi vous devez utiliser une commande qui restera valide. Je vais illustrer des problèmes qui viennent avec note être détaché ou occuper le même endroit dans la mémoire. P>

ne pas être détaché: strong> p>

tensor([0.], requires_grad=True) None


0 commentaires

1
votes

@staticdean a une bonne réponse, je vais simplement ajouter un bit spécifique à ce que vous faites:

"Je convertissions une liste de listes en un tenseur Pytorch" - ce n'est pas du tout ce qui se passe . Votre exemple exemple convertit une liste de listes de chiffres vers une liste de tenseurs. Imprimer la chose_tensor, il devrait être: xxx

ceci est parce que la carte appelle la carte Torch.tensor sur chaque élément de la liste de niveau supérieur, créant des tenseurs séparés. En outre, cela fonctionne sans erreur.

Qu'est-ce qui s'est probablement arrivé est que vous avez essayé d'abord torche.tensor (chose) pour convertir la liste des listes en une fois, et avoir une erreur. ValueError: séquence attendue de longueur 5 à Dim 1 (obtenu 2) . La raison en est que les tenseurs doivent être rectangulaires - par exemple pour un tenseur 2D, chaque ligne / colonne doit avoir la même taille. Vous ne pouvez pas réellement convertir la liste des listes que vous avez à un tenseur, non sans changer les tailles de certains éléments.

Un exemple de convertir une liste de listes en un seul tenseur avec un seul appel : xxx

fonctionne bien puisque chaque ligne est la taille 3 et la taille de chaque colonne 2; Aucune carte nécessaire.


0 commentaires

0
votes

Cela fonctionne bien sur mon environnement Pytorch. Je pense que l'avertissement que vous avez rencontré était due à une autre raison comme la version Pytorch ou la version Python, etc.

C'est mon résultat pour exécuter votre code sans aucune correction.


0 commentaires