Article original : PyTorch Tensor Methods – How to Create Tensors in Python
Par Srijan
PyTorch est une bibliothèque open-source basée sur Python. Elle offre une grande flexibilité et rapidité lors de la construction, de l'entraînement et du déploiement de modèles de deep learning.
Au cœur de PyTorch, on trouve des opérations impliquant des tenseurs. Un tenseur est un nombre, un vecteur, une matrice ou tout tableau à n dimensions.
Dans cet article, nous verrons différentes façons de créer des tenseurs en utilisant les méthodes (fonctions) de tenseurs PyTorch.
Sujets que nous allons couvrir
- tensor
- zeros
- ones
- full
- arange
- linspace
- rand
- randint
- eye
- complex
La méthode tensor()
Cette méthode retourne un tenseur lorsque des data lui sont passés. Les data peuvent être un scalaire, un tuple, une liste ou un tableau NumPy.
Dans l'exemple ci-dessus, un tableau NumPy créé avec np.arange() a été passé à la méthode tensor(), résultant en un tenseur 1-D.
Nous pouvons créer un tenseur multidimensionnel en passant un tuple de tuples, une liste de listes ou un tableau NumPy multidimensionnel.
Lorsque qu'un tuple ou une liste vide est passé à tensor(), il crée un tenseur vide.
La méthode zeros()
Cette méthode retourne un tenseur où tous les éléments sont des zéros, de la size (forme) spécifiée. La size peut être donnée sous forme de tuple ou de liste ou ni l'un ni l'autre.
Nous aurions pu passer 3, 2 à l'intérieur d'un tuple ou d'une liste également. Il est évident que passer des nombres négatifs ou un float entraînerait une erreur d'exécution.
Passer un tuple vide ou une liste vide donne un tenseur de taille (dimension) 0, ayant 0 comme seul élément, dont le type de données est float.
La méthode ones()
Similaire à zeros(), ones() retourne un tenseur où tous les éléments sont 1, de la size (forme) spécifiée. La size peut être donnée sous forme de tuple ou de liste ou ni l'un ni l'autre.
Comme zeros(), passer un tuple ou une liste vide donne un tenseur de dimension 0, ayant 1 comme seul élément, dont le type de données est float.
La méthode full()
Et si vous voulez que tous les éléments d'un tenseur soient égaux à une certaine valeur mais pas seulement 0 et 1 ? Peut-être 2.9 ?
full() retourne un tenseur de la forme donnée par l'argument size, avec tous ses éléments égaux à fill_value.
Ici, nous avons créé un tenseur de forme 3, 2 avec fill_value égal à 3. Ici encore, passer un tuple ou une liste vide crée un tenseur scalaire de dimension zéro.
Lors de l'utilisation de full, il est nécessaire de donner size sous forme de tuple ou de liste.
La méthode arange()
Cette méthode retourne un tenseur 1-D, avec des éléments allant de start (inclus) à end (exclus) avec une différence commune step. La valeur par défaut pour start est 0 tandis que celle pour step est 1.
Les éléments du tenseur peuvent être considérés comme étant en progression arithmétique, avec step comme différence commune.
Ici, nous avons créé un tenseur qui commence à 2 et va jusqu'à 20 avec un step (différence commune) de 2.
Les trois paramètres, start, end et step, peuvent être positifs, négatifs ou float.
Lors du choix de start, end et step, nous devons nous assurer que start et end sont cohérents avec le signe de step.
Puisque step est défini comme -2, il n'y a aucun moyen que -42 puisse atteindre -22 (exclus). Par conséquent, cela donne une erreur.
La méthode linspace()
Cette méthode retourne un tenseur 1-D, avec des éléments allant de start (inclus) à end (inclus). Cependant, contrairement à arange(), ici, steps n'est pas la différence commune mais le nombre d'éléments à inclure dans le tenseur.
PyTorch décide automatiquement de la différence commune en fonction du nombre de steps donné.
Ne pas fournir de valeur pour steps est obsolète. Pour la compatibilité ascendante, ne pas fournir de valeur pour steps crée un tenseur avec 100 éléments. Selon la documentation officielle, dans une future version de PyTorch, l'omission de fournir une valeur pour steps générera une erreur d'exécution.
Contrairement à arange(), linspace peut avoir un start supérieur à end puisque la différence commune est calculée automatiquement.
Puisque steps ici n'est pas une différence commune, mais le nombre d'éléments, il ne peut être qu'un entier non négatif.
La méthode rand()
Cette méthode retourne un tenseur rempli de nombres aléatoires provenant d'une distribution uniforme sur l'intervalle 0 (inclus) à 1 (exclus). La forme est donnée par l'argument size. L'argument size peut être donné sous forme de tuple ou de liste ou ni l'un ni l'autre.
Passer un tuple ou une liste vide crée un tenseur scalaire de dimension zéro.
La méthode randint()
Cette méthode retourne un tenseur rempli d'entiers aléatoires générés uniformément entre low (inclus) et high (exclus). La forme est donnée par l'argument size. La valeur par défaut pour low est 0.
Lorsque seul un argument int est passé, low prend la valeur 0 par défaut, et high prend la valeur passée.
L'argument size n'accepte qu'un tuple ou une liste. Un tuple ou une liste vide crée un tenseur de dimension zéro.
La méthode eye()
Cette méthode retourne un tenseur 2-D avec des uns sur la diagonale et des zéros ailleurs. Le nombre de lignes est donné par n et le nombre de colonnes par m.
La valeur par défaut pour m est la valeur de n. Lorsque seul n est passé, il crée un tenseur sous la forme d'une matrice identité. Une matrice identité a ses éléments diagonaux égaux à 1 et tous les autres égaux à 0.
La méthode complex()
Cette méthode retourne un tenseur complexe dont la partie réelle est égale à real et la partie imaginaire est égale à imag. real et imag sont tous deux des tenseurs.
Le type de données des tenseurs real et imag doit être soit float soit double.
De plus, la size des deux tenseurs, real et imag, doit être la même, car les éléments correspondants des deux matrices forment un nombre complexe.
Conclusion
Nous avons couvert dix différentes façons de créer des tenseurs en utilisant les méthodes PyTorch. Vous pouvez consulter la documentation officielle pour en savoir plus sur les autres méthodes PyTorch.
Vous pouvez cliquer ici pour accéder au notebook Jupyter où vous pouvez expérimenter avec ces méthodes.
Si vous souhaitez en apprendre davantage sur PyTorch, consultez ce cours incroyable sur la chaîne YouTube de freeCodeCamp.
Restez en sécurité !