[PYTHON] [Tutoriel PyTorch ①] Qu'est-ce que PyTorch?

introduction

Preferred Networks, qui a développé Chainer, sera basé sur PyTorch à l'avenir Article A été vu. Il semble que de nombreux articles universitaires soient également rédigés par PyTorch. PyTorch est une bibliothèque d'apprentissage en profondeur développée et publiée par Facebook. PyTorch est-il susceptible de devenir la norme à l'avenir? J'aimerais donc démarrer PyTorch avec les tutoriels officiels (https://pytorch.org/tutorials/).

"[QU'EST-CE QUE PYTORCH?](Https: //)" dans le premier tutoriel "APPRENTISSAGE PROFOND AVEC PYTORCH: UN BLITZ DE 60 MINUTES" dans la mise en route pytorch.org/tutorials/beginner/blitz/tensor_tutorial.html#sphx-glr-beginner-blitz-tensor-tutorial-py) ».

table des matières

1.Google Colaboratory 2. Utilisez Google Colaboratory avec votre compte Google 3.What is PyTorch? 3.1. Création de Tensor 3.2. Fonctionnement du Tensor 3.3.Tensor ⇔ Numpy 3.4.CUDA Tensor 4. Enfin Histoire

1.Google Colaboratory

Je pense que le tutoriel PyTorch peut être facilement avancé en utilisant l'environnement de Google Colaboratory. Google Colaboratory est un environnement fourni par Google qui vous permet d'exécuter Python dans votre navigateur. Vous avez besoin d'un compte Google, mais en travaillant avec Google Drive, vous pouvez exécuter des fichiers sur le lecteur dans un environnement Colaboratory, et lire et exporter des fichiers sur le lecteur.

2. Utilisez Google Colaboratory avec votre compte Google

Préparons un environnement pour utiliser Colaboratory. Lorsque vous vous connectez avec votre compte Google et que vous accédez à Colaboratory (https://colab.research.google.com/), vous verrez une fenêtre contextuelle semblable à celle ci-dessous. .. Ici, "Annuler" une fois.

20200222_01.png

Ensuite, l'écran suivant «Bienvenue dans Colaboratory» s'affiche. Cliquez sur Copier sur le lecteur.

20200222_02.png

Si vous accédez à Google Drive, le dossier "Colab Notebooks" sera créé comme indiqué ci-dessous.

20200222_03.png

Vous êtes maintenant prêt à utiliser Google Colaboratory.

Accédez aux tutoriels de PyTorch (https://pytorch.org/tutorials/beginner/blitz/tensor_tutorial.html) (https://pytorch.org/tutorials/beginner/blitz/tensor_tutorial.html). Cliquez sur Exécuter dans Google Colab. Vous pouvez procéder tel quel, mais cliquez sur Copier sur le lecteur.

20200222_04.png

Cela copiera le fichier dans le dossier «Colab Notebooks» sur le Google Drive que vous venez de créer. Ensuite, vous pouvez exécuter le fichier dans l'environnement Colaboratory en cliquant avec le bouton droit sur le fichier ⇒ «Ouvrir avec» ⇒ «Google Colaboratory». En copiant le tutoriel sur Google Drive et en continuant, vous pouvez continuer tout en ajoutant votre propre description.

20200222_05.png

3.What is PyTorch?

3.1. Création de Tensor

L'introduction a été allongée, mais nous allons continuer avec le tutoriel PyTorch. Cette fois, c'est dès le premier "Qu'est-ce que Py Torch?".

PyTorch gère les données d'entrée avec Tensor. Tensor est un tableau de dimensions arbitraires. Un seul nombre ou scalaire est un tenseur d'ordre 0, un tableau ou vecteur 1D est un tenseur du 1er ordre, un tableau ou une matrice 2D est un tenseur du 2e ordre et un tableau 3D est un tenseur du 3e ordre. Créez un Tensor non initialisé avec torch.empty.

from __future__ import print_function
import torch

x = torch.empty(5, 3)
print(x)
tensor([[2.8129e-35, 0.0000e+00, 0.0000e+00],
        [0.0000e+00, 0.0000e+00, 0.0000e+00],
        [0.0000e+00, 0.0000e+00, 2.8026e-45],
        [0.0000e+00, 1.1210e-44, 0.0000e+00],
        [1.4013e-45, 0.0000e+00, 0.0000e+00]])

Créez un Tensor à valeur aléatoire dans torch.rand.

x = torch.rand(5, 3)
print(x)
tensor([[0.0129, 0.2380, 0.2860],
        [0.0942, 0.6319, 0.9040],
        [0.3457, 0.0503, 0.9295],
        [0.2715, 0.8802, 0.6511],
        [0.3274, 0.0322, 0.0097]])

Créez un Tensor avec zéro élément dans torch.zeros.

x = torch.zeros(5, 3, dtype=torch.long)
print(x)
tensor([[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]])

Vous pouvez créer un Tensor en passant une liste à torch.tensor.

x = torch.tensor([5.5, 3])
print(x)
tensor([5.5000, 3.0000])

Réécrivez le Tensor d'origine avec l'élément 1 avec new_ones. De plus, randn_like réécrit le Tensor original avec une valeur aléatoire. Puisqu'il s'agit de randn, ce sera une valeur aléatoire pour la normalisation (moyenne 0, écart type 1).

x = x.new_ones(5, 3, dtype=torch.double)      # new_* methods take in sizes
print(x)

x = torch.randn_like(x, dtype=torch.float)    # override dtype!
print(x)   
tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]], dtype=torch.float64)
tensor([[-1.7169,  0.0026,  0.0341],
        [-0.8156,  0.0672,  0.6364],
        [-0.3116, -0.1866, -1.3844],
        [-0.2527, -0.9790, -1.6029],
        [-0.9892,  0.4730,  0.4554]])

Obtenez la taille de Tensor avec size ().

print(x.size())
torch.Size([5, 3])

3.2. Fonctionnement du Tensor

L'ajout se fait élément par élément. Il existe deux descriptions, l'opérateur + et torch.add.

y = torch.rand(5, 3)
print(x + y)
tensor([[-1.1761,  0.5185,  0.9026],
        [-0.6358,  0.8661,  0.9583],
        [ 0.4605, -0.0935, -0.7063],
        [ 0.7133, -0.8798, -1.0570],
        [-0.3332,  1.0319,  0.5329]])
print(torch.add(x, y))
tensor([[-1.1761,  0.5185,  0.9026],
        [-0.6358,  0.8661,  0.9583],
        [ 0.4605, -0.0935, -0.7063],
        [ 0.7133, -0.8798, -1.0570],
        [-0.3332,  1.0319,  0.5329]])

Vous pouvez spécifier le Tensor de sortie avec l'argument out.

result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)
tensor([[-1.1761,  0.5185,  0.9026],
        [-0.6358,  0.8661,  0.9583],
        [ 0.4605, -0.0935, -0.7063],
        [ 0.7133, -0.8798, -1.0570],
        [-0.3332,  1.0319,  0.5329]])

Réécrivez le Tensor d'entrée avec le résultat du calcul avec add_.

# adds x to y
y.add_(x)
print(y)
tensor([[-1.1761,  0.5185,  0.9026],
        [-0.6358,  0.8661,  0.9583],
        [ 0.4605, -0.0935, -0.7063],
        [ 0.7133, -0.8798, -1.0570],
        [-0.3332,  1.0319,  0.5329]])

Les tranches NumPy peuvent également être utilisées.

print(x[:, 1])
tensor([ 0.0026,  0.0672, -0.1866, -0.9790,  0.4730])

torch.view transforme la forme de Tensor. Si vous spécifiez -1, il sera complété en considérant d'autres dimensions.

x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8)  # the size -1 is inferred from other dimensions
print(x.size(), y.size(), z.size())
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])

Vous pouvez l'obtenir comme valeur normale en utilisant item () pour Tensor avec 1 élément.

x = torch.randn(1)
print(x)
print(x.item())
tensor([-1.5867])
-1.5867252349853516

3.3.Tensor ⇔ Numpy

La conversion de NumPy en Tensor se fait avec torch.numpy (). Parce qu'il partage la mémoire, changer l'un changera également l'autre.

a = torch.ones(5)
print(a)
tensor([1., 1., 1., 1., 1.])
b = a.numpy()
print(b)
[1. 1. 1. 1. 1.]
a.add_(1)
print(a)
print(b)
tensor([2., 2., 2., 2., 2.])
[2. 2. 2. 2. 2.]

La conversion de Tensor en NumPy se fait avec torch.from_numpy ().

import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)
[2. 2. 2. 2. 2.]
tensor([2., 2., 2., 2., 2.], dtype=torch.float64)

3.4.CUDA Tensor

Vous pouvez utiliser torch.to () pour déplacer Tensor vers différents appareils. Le code ci-dessous permet d'accéder au périphérique CUDA. CUDA est une plate-forme d'environnement GPU fournie par NVIDIA.

# let us run this cell only if CUDA is available
# We will use ``torch.device`` objects to move tensors in and out of GPU
if torch.cuda.is_available():
    device = torch.device("cuda")          # a CUDA device object
    y = torch.ones_like(x, device=device)  # directly create a tensor on GPU
    x = x.to(device)                       # or just use strings ``.to("cuda")``
    z = x + y
    print(z)
    print(z.to("cpu", torch.double))       # ``.to`` can also change dtype together!
tensor([0.9866], device='cuda:0')
tensor([0.9866], dtype=torch.float64)

Pour que le code ci-dessus s'exécute dans Colaboratory, vous devez définir «Accélérateur matériel» sur «GPU» dans le menu «Modifier le temps d'exécution».

20200223_01.png

4. Enfin

C'est le contenu du premier tutoriel de PyTorch, "Qu'est-ce que PyTorch?". La prochaine fois aimerait continuer avec le deuxième tutoriel "AUTOGRAD: DIFFERENTIATION AUTOMATIQUE".

Histoire

2020/02/23 Première édition publiée 2020/02/28 Ajout du lien suivant

Recommended Posts

[Tutoriel PyTorch ①] Qu'est-ce que PyTorch?
[Tutoriel PyTorch ⑥] Qu'est-ce que torch.nn?
Qu'est-ce que l'espace de noms
Qu'est-ce que copy.copy ()
Qu'est-ce que Django? .. ..
Qu'est-ce que dotenv?
Qu'est-ce que POSIX
Qu'est-ce que Linux
Qu'est-ce que le klass?
Qu'est-ce que SALOME?
Qu'est-ce que Linux?
Qu'est-ce que python
Qu'est-ce que l'hyperopt?
Qu'est-ce que Linux
Qu'est-ce que pyvenv
Qu'est-ce que __call__
Qu'est-ce que Linux
Qu'est-ce que Python
Qu'est-ce qu'une distribution?
Qu'est-ce que le F-Score de Piotroski?
Qu'est-ce que Raspberry Pi?
[Python] Qu'est-ce que Pipeline ...
Qu'est-ce que Calmar Ratio?
Qu'est-ce que le réglage des hyper paramètres?
Qu'est-ce qu'un hacker?
Qu'est-ce que JSON? .. [Remarque]
PyTorch DataLoader est lent
À quoi sert Linux?
Qu'est-ce qu'un pointeur?
Qu'est-ce que l'apprentissage d'ensemble?
Qu'est-ce que TCP / IP?
[Tutoriel PyTorch ③] RÉSEAUX NEURAUX
Qu'est-ce que __init__.py de Python?
Qu'est-ce qu'un itérateur?
Qu'est-ce que UNIT-V Linux?
[Python] Qu'est-ce que virtualenv
Qu'est-ce que l'apprentissage automatique?
Qu'est-ce que Mini Sam ou Mini Max?
Qu'est-ce que l'analyse de régression logistique?
[Tutoriel PyTorch ④] FORMATION D'UN CLASSIFICATEUR
Tutoriel [PyTorch] (version japonaise) ② ~ AUTOGRAD ~
Qu'est-ce qu'une variable d'instance?
Qu'est-ce qu'un arbre de décision?
Qu'est-ce qu'un changement de contexte?
Qu'est-ce que Google Cloud Dataflow?
[DL] Qu'est-ce que la décroissance du poids?
[Python] Python et sécurité-① Qu'est-ce que Python?
Qu'est-ce qu'un super utilisateur?
La programmation du concours, c'est quoi (bonus)
[Python] * args ** Qu'est-ce que kwrgs?
Qu'est-ce qu'un appel système
Tutoriel [PyTorch] (version japonaise) ① ~ Tensol ~
[Définition] Qu'est-ce qu'un cadre?
[Tutoriel PyTorch ②] Autograd: différenciation automatique
Tutoriel sur le réseau neuronal (CNN) de Pytorch 1.3.1.
A quoi sert l'interface ...
Qu'est-ce que Project Euler 3 Acceleration?
Qu'est-ce qu'une fonction de rappel?
Qu'est-ce que la fonction de rappel?