[PYTHON] PyTorch Super Introduction Principes de base de PyTorch

introduction

Cette série est écrite comme un résumé de l'apprentissage de PyTorch, le cadre d'apprentissage automatique de Python. Cette fois, j'ai écrit un résumé des bases de PyTorch. Cela peut être difficile à lire comme matériel de lecture parce que j'essaie d'écrire les points principaux plutôt que de les transmettre, mais j'espère que vous pourrez l'utiliser pour comprendre les points.

Qu'est-ce que PyTorch?

Comme mentionné précédemment, PyTorch est le cadre d'apprentissage automatique de Python. En parlant de frameworks d'apprentissage automatique, il existe TensorFlow développé par Google, Keras ou chainer. La subjectivité personnelle est incluse, mais si vous les divisez grossièrement, cela ressemble à ce qui suit.

Cadre Principales caractéristiques
TensorFlow, Keras Pour l'industrie
PyTorch, Chainer Pour la recherche (hautement personnalisable)

De plus, je pense que la plupart des gens viendront de TensorFlow lorsqu'ils voudront commencer l'apprentissage automatique, mais une règle légèrement inhabituelle qui décrit la définition et l'exécution de la structure de données définir et exécuter '' séparément. Pour cette raison, je pense que certaines personnes peuvent ne pas être familières avec cela et disparaître. D'un autre côté, PyTorch et Chainer utilisent define by run '', donc vous pouvez le coder de la même manière que le code Python que vous codez normalement, donc c'est familier (bien que je l'aime bien). Est une fonctionnalité.

Cependant, le mécanisme `` définir et exécuter '', qui est un peu difficile à comprendre, semble avoir des avantages tels qu'une optimisation facile et une vitesse de calcul plus rapide du montant défini précédemment. Il y a des avantages et des inconvénients.

Jetons un coup d'œil au contenu de PyTorch.

Configuration PyTorch

PyTorch a la structure suivante.

Contenu La description
torch Tensor et diverses fonctions mathématiques sont inclus dans ce package dans l'espace de noms principal.Il imite la structure de NumPy
torch.autograd Contient des fonctions de différenciation automatique. Différenciation automatique sur/Activer le gestionnaire de contexte pour contrôler_grad/no_Inclut grad et Function, qui est la classe de base utilisée lors de la définition de fonctions différenciables uniques.
torch.nn Différentes structures de données et couches pour la construction d'un réseau neuronal sont définies. Par exemple, des fonctions d'activation telles que Convolution, LSTM et ReLU et des fonctions de perte telles que MSELoss sont également incluses.
torch.optim Un algorithme d'optimisation des paramètres centré sur la descente de gradient probabiliste (SGD) est implémenté
torch.utils.data Contient des fonctions utilitaires pour créer un mini-lot lors de la rotation de calculs itératifs SGD
torch.onnx ONNX(Open Neural Network Exchange)[^1]Utilisé pour exporter le modèle au format.

[^ 1]: Format de partage de modèles entre différents frameworks d'apprentissage profond

Génération et conversion de tenseurs

Génération de Tensor

Il existe plusieurs façons de générer un Tensor.

Génération de Tensor


import numpy as np
import torch

#Créé en passant une liste imbriquée
t = torch.tensor([[1, 2], [3, 4]])

#Créer un Tensor sur GPU en spécifiant un appareil
t = torch.tensor([[1, 2], [3, 4]], device = "cuda:0")

#Créer un Tensor double précision en spécifiant dtype
t = torch.tensor([[1, 2], [3, 4]], dtype = "torch.float64")

# 0~Tensor unidimensionnel initialisé avec un nombre de 9
t = torch.arange(0, 10)

#Créez un Tensor 100x100 avec toutes les valeurs 0 et transférez-le sur le GPU avec la méthode to
t = torch.zeros(100,100).to("cuda:0")

#100x100 Tenseur aléatoire
t = torch.random(100, 100)

Comment convertir Tensor

Tensor peut être facilement converti en ndarray de NumPy. Cependant, Tensor sur GPU ne peut pas être converti tel quel et il est nécessaire de le déplacer une fois vers le processeur.

conversion de tenseur


#Convertir en ndarray en utilisant la méthode numpy
t = torch.tensor([[1, 2], [3, 4]])
nd_arr = t.numpy()

#Déplacer Tensor du GPU vers le CPU
t = torch.tensor([[1, 2], [3, 4]], device = "cuda: 0")
t_cpu = t.to("cpu")
nd_arr = t_cpu.numpy()

#Continuez à remplir ce qui précède
t = torch.tensor([[1, 2], [3, 4]], device = "cuda: 0")
nd_arr = t.to("cpu").numpy()

Opération d'indexation Tensor

Comme ndarray, Tensor prend également en charge l'opération d'indexation [^ 2]. Les méthodes qui peuvent être spécifiées sont les suivantes.

[^ 2]: pour obtenir ou modifier la valeur d'un tableau en spécifiant un indice

[^ 3]: un tableau de la même taille que le tableau d'origine, avec chaque élément du tableau défini sur True / False.

Opération d'indexation Tensor



t = torch.tensor([[1, 2, 3], [4, 5, 6]])

#Spécifié par un indice scalaire
t[0, 2] # tensor(3)

#Spécifié par tranche
t[:, :2] # tensor([[1, 2], [4, 5]])

#Spécifié dans la liste des indices
t[:, [1, 2]]  # tensor([[2, 3], [5, 6]])

#Utilisez la matrice de masques pour sélectionner uniquement les parties supérieures à 3
t[t > 3] # tensor([4, 5, 6])

# [0, 1]Remplacer l'élément par 100
t[0, 1] = 100  # tensor([[1, 100, 3], [4, 5, 6]])

#Affectation groupée à l'aide de tranches
t[:, 1] = 200  # tensor([[1, 200, 3], [4, 200, 6]])

#Remplacer uniquement les éléments par des conditions spécifiques à l'aide d'un tableau de masques
t[t > 10] = 20  # tensor([[1, 2, 3], [4, 5, 6]])

Arithmétique Tensor

Tensor peut effectuer des opérations à quatre règles, des fonctions mathématiques, des calculs algébriques linéaires, etc. Bien que cela puisse être fait avec ndarray, les calculs algébriques linéaires tels que le produit matriciel et la décomposition de valeurs singulières [^ 4] ont de meilleures performances que l'utilisation de NumPy / SciPy, en particulier pour les données à grande échelle, car le GPU peut être utilisé. Il y a beaucoup de.

[^ 4]: La décomposition en valeurs singulières (SVD) est un calcul souvent utilisé en algèbre linéaire, qui décompose la matrice A en le produit de trois matrices comme USV.
U et V sont des matrices orthogonales, et S est une matrice carrée avec seulement des composantes diagonales, qui sont utilisées pour résoudre la méthode du carré minimum et pour l'approximation / compression de matrice.

Les quatre règles de Tensor

La disponibilité des quatre règles de Tensor est la suivante.

Tensor Tensor(Du même type)
Tensor Tensor(Type différent)
Tensor Scalaire Python
Tensor ndarray

Il est à noter que les quatre règles de fonctionnement entre Tensors doivent être du même type. Lors de l'exécution d'opérations à quatre règles, les dimensions sont automatiquement complétées par des opérations scalaires vectorielles et des opérations matrice-vecteur (Broadcast. user / basics.broadcasting.html)).

Les quatre règles de Tensor


#vecteur
v = torch.tensor([1, 2, 3])
w = torch.tensor([4, 5, 6])

#queue
m = torch.tensor([[0, 1, 2], [10, 20, 30]])
n = torch.tensor([[3, 4, 5], [40, 50, 60]])

#vecteur-scalaire
v_pl = v + 10  # tensor([11, 12, 13])
v_mi = v - 10  # tensor([-9, -8, -7])
v_mu = v * 10  # tensor([10, 20, 30])
v_di = v / 10  # tensor([0, 0, 0])

#vecteur-vecteur
v_pl = v + w  # tensor([5, 7, 9])
v_mi = v - w  # tensor([-3, -3, -3])
v_mu = v * w  # tensor([4, 10, 18])
v_di = v / w  # tensor([0, 0, 0])

#Matrice et vecteur
v_pl = m + v  # tensor([[ 1,  3,  5], [11, 22, 33]])
v_mi = m - v  # tensor([[-1, -1, -1], [ 9, 18, 27]])
v_mu = m * v  # tensor([[ 0,  2,  6], [10, 40, 90]])
v_di = m / v  # tensor([[ 0,  0,  0], [10, 10, 10]])

#Matrice et matrice
v_pl = m + n  # tensor([[3, 5, 7], [50, 70, 90]])
v_mi = m - n  # tensor([[-3, -3, -3], [-30, -30, -30]])
v_mu = m * n  # tensor([[0, 4, 10], [400, 1000, 1800]])
v_di = m / n  # tensor([[0, 0, 0], [0, 0, 0]])


Il y a un endroit où la sortie devient 0 lors de la division. Comme vous pouvez le voir, même si le résultat de l'opération affiche une valeur après la virgule décimale, le type de tenseur est int. Si vous voulez l'éviter, spécifiez float etc. à l'avance.

Fonctions mathématiques disponibles dans PyTorch

PyTorch fournit diverses fonctions mathématiques pour Tensor.

** Fonctions mathématiques qui affectent chaque valeur de Tensor **

Nom de la fonction Aperçu
abs Valeur absolue
sin sinus
cos cosinus
exp Exponentiel
log Fonction logarithmique
sqrt racine carrée

** Fonction d'agrégation **

une fonction Aperçu
sum Somme des valeurs en tenseur
max Valeur maximale en tenseur
min Valeur minimale en tenseur
mean Valeur moyenne en tenseur
std Écart type des valeurs en tenseur

Opérateur algébrique linéaire

une fonction Aperçu
dot Produit intérieur des vecteurs
mv Produit de matrice et de vecteur
mm Produit de matrice et de matrice
matmul Sélectionnez automatiquement point, mv, mm en fonction du type d'argument et exécutez
gesv Résolution d'équations simultanées par décomposition LU
eig, symeig Décomposition de valeur unique. symeig est pour la matrice cible
svd Décomposition de singularité

Voyons quel sera le résultat (je ne l'ai pas montré car le résultat est assez long).

Arithmétique de l'algèbre linéaire


m = torch.randn(100, 10)  #Créer des données de test matricielles 100x10
v = torch.randn(10)

#produit intérieur
torch.dot(v, v)

#Produit de matrice et de vecteur
torch.mv(m, v)

#Produit matriciel
torch.mm(m.t(), m)

#Décomposition de singularité
u, s, v = torch.svd(m)

Autres fonctions fréquemment utilisées

Nom de la fonction Aperçu
view Changer la dimension de Tensor
cat, stack Rejoignez Tensors ensemble
transpose Swap dimensions

Différenciation automatique

Si vous définissez requires_grad de Tensor sur `` `` True, l'indicateur de différenciation automatique sera activé. Cet indicateur est activé pour tous les paramètres et données lorsqu'il s'agit de réseaux neuronaux. En empilant diverses opérations sur Tensor avec requires_grad '' 'activé, un graphe de calcul est construit et en appelant la méthode arrière, il est automatiquement différencié de ces informations.

en conclusion

Cette fois, j'ai principalement résumé Tensor, indispensable pour gérer la configuration PyTorch et l'apprentissage automatique. Merci à tous ceux qui ont lu jusqu'au bout. À partir de la prochaine fois, je construirai petit à petit un réseau de neurones, donc si vous êtes intéressé, jetez un œil.

référence

Morisebashi (2018) "Peut être utilisé sur le terrain! Introduction au développement PyTorch Création d'un modèle d'apprentissage en profondeur et mise en œuvre dans les applications »

Recommended Posts

PyTorch Super Introduction Principes de base de PyTorch
pytorch super introduction
[Super introduction à l'apprentissage automatique] Découvrez les didacticiels Pytorch
Introduction à Lightning Pytorch
introduction super élémentaire de bouteille
[Super introduction à l'apprentissage automatique] Découvrez les didacticiels Pytorch
Introduction à PyTorch (environnement virtuel)
Introduction à PyTorch (1) Différenciation automatique
Une super introduction à Linux
[Super Basics] À propos de Jupyter Notebook
Super introduction à l'apprentissage automatique
introduction
[Détails (?)] Introduction au pytorch ~ CNN de CIFAR10 ~
[PyTorch] Introduction à la classification de documents à l'aide de BERT
[Introduction à Pytorch] J'ai joué avec sinGAN ♬
Bases de PyTorch (1) -Comment utiliser Tensor-
[Introduction au Data Scientist] Bases de Python ♬