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).
3 Réponses :
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 Je vais continuer pourquoi il est préférable d'utiliser sur ma version de pytorch à l'aide de ne pas être détaché: strong> p> chose code> par tensors.
x.clone (). détacher () code> plutôt que
torche.tensor (x) code> pour effectuer une copie: p>
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>
tensor([0.], requires_grad=True) None
@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: p> 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. P> Qu'est-ce qui s'est probablement arrivé est que vous avez essayé d'abord Un exemple de convertir une liste de listes en un seul tenseur avec un seul appel : p> fonctionne bien puisque chaque ligne est la taille 3 et la taille de chaque colonne 2; Aucune carte nécessaire. P> p> torche.tensor (chose) code> pour convertir la liste des listes en une fois, et avoir une erreur.
ValueError: séquence attendue de longueur 5 à Dim 1 (obtenu 2) code>. 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. P>
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. P>
C'est mon résultat pour exécuter votre code sans aucune correction. P >
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? :)