Python débutant touche Pytorch (2)

Dans cet article, j'écrirai la suite de l'article que j'ai écrit la dernière fois, "Les débutants en Python touchent Pytorch (1)".

1. Différenciez-vous avec Pytorch

1-1. Inclinaison de base Comme je l'ai mentionné à la fin de la dernière fois, cette fois, je vais expliquer la différenciation. La différenciation consiste à trouver le "tilt" dans la fonction. Tout d'abord, pensons à l'inclinaison avant d'apprendre la différenciation.

y = 3x \\

Dans la fonction ci-dessus, la pente est "3" </ font>. En effet, si vous augmentez x de "1" dans un plan bidimensionnel, y augmente de "3".

La pente peut être considérée comme la quantité de changement dans le graphique. Il sera plus facile à comprendre si vous pouvez imaginer le graphique que vous avez appris à l'école primaire.

1-2.2 Inclinaison lorsque plus d'une variable Auparavant, il y avait une variable par fonction. Une variable signifie qu'il n'y a qu'un seul caractère impliqué dans le résultat de la fonction. Vérifions avec l'exemple ci-dessous.
\\
y = 3x\\

y = x^2+3x+4

Les fonctions ci-dessus sont toutes des fonctions à une variable. Alors, quel type de fonction est une fonction avec deux variables ou plus?


y = x_1+2x_2+3x_3

La fonction ci-dessus est une fonction à deux variables. La grande différence avec une fonction à une variable est le nombre de variables. Il existe 2 types et 3 types de variables appelées x dans la fonction.
Pour les fonctions avec deux variables ou plus, considérez la pente de chaque variable. Donc,

x_Incliner environ 1= 1\\x_Incliner environ 2= 2\\x_Incliner environ 3= 3 

On dirait.

Vous pouvez voir que la plage d'expression de la fonction s'est élargie en raison de l'augmentation des types d'inclinaison. (La largeur de l'expression est le nombre de variations de la réponse «y».)

Le réseau de neurones utilise de nombreuses variables pour exprimer des fonctions complexes et des fonctions en tant que discriminateur.

Je vais omettre la relation détaillée entre les fonctions et les variables. Ceux qui sont intéressés sont encouragés à étudier dur dans des livres et des sites fiables.

1-3.2 Comment trouver la pente de la fonction d'ordre ou plus Ensuite, je vais vous expliquer comment différencier une fonction qui est plus qu'une fonction quadratique et trouver la pente. Fondamentalement, la différenciation est efficace pour les fonctions quadratiques ou supérieures.
y = x^2 + x\\
\\
y' = 2x + 1

y 'signifie différentiel. La différenciation de l'équation ci-dessus donne l'équation suivante. J'expliquerai le principe de base. Les règles de différenciation lorsque x est une variable sont décrites ci-dessous.

y = ax^n \hspace{5mm} \rightarrow \hspace{5mm} y' = nax^{n-1} \\
y = x \hspace{5mm} \rightarrow \hspace{5mm} y' = 1

Cette fois, si vous pouvez comprendre cela, il n'y a pas de problème.

C'est vraiment le fondement du fondement de la différenciation. Les différences qui ne peuvent pas être introduites ici, telles que les méthodes de différenciation compliquées, les fonctions triangulaires et les fonctions logarithmiques, sont ici

Lien: Belle histoire de mathématiques au lycée Liste de formules différentielles (de la base au développement)

De plus, pour les fonctions quadratiques et supérieures, vous pouvez vérifier la pente en se concentrant sur un certain point de la fonction.

Exemple) \hspace{1mm} y=x^2 + 3  \hspace{5mm} \rightarrow \hspace{5mm} y' = 2x \hspace{2mm}(différentiel)\\
x=Inclinaison à 1\hspace{3mm}y` =2 ・ 1=2\\
x=Inclinaison à 2\hspace{3mm}y` =2 · 2=4

Si vous pouvez comprendre ce qui précède, il est facile de comprendre cet article.

2. Codage réel

2-1.1 Différenciation des variables Faisons une différence avec Pytorch. Tout d'abord
y = 3x

Se différencie par Pytorch et la pente 3 est calculée.

python


import torch
x = torch.ones(3,3,requires_grad=True)
a = torch.tensor([[3,3,3],[3,3,3],[3,3,3]])
y = a*x

Pour la différenciation, ajoutez "requires_grad = True" lors de la déclaration de la variable que vous souhaitez différencier. C'est le code qui permet la différenciation. De plus, si le contenu de la variable utilisée pour la différenciation est de type entier, une erreur se produira. Déclarez-le comme type à virgule flottante. </ font>

résultat


tensor([[3., 3., 3.],
        [3., 3., 3.],
        [3., 3., 3.]], grad_fn=<MulBackward0>)

Assurez-vous que l'instruction "grad_fn =" est ajoutée à la sortie.

Voici quelques éléments à garder à l'esprit lors de la différenciation. Dans Pytorch, lors de la différenciation, doit être unidimensionnel. Puisqu'il s'agit de </ font>, tous les tenseurs sont rassemblés en un seul.

python


y = torch.sum(y)

torch.sum () a été introduit dans l'article précédent. Veuillez vous référer à l'article précédent. Les débutants en Python touchent Pytorch (1)

Nous allons enfin nous différencier.

python


y.backward()
print(x.grad)

.backward () est une préparation nécessaire lors de l'exécution de la différenciation. De plus, lors de l'exécution de .backward (), une erreur se produira si la variable différenciée n'est pas unidimensionnelle.

Voyons le résultat

résultat


tensor([[3., 3., 3.],
        [3., 3., 3.],
        [3., 3., 3.]])

J'ai pu effectuer des calculs différentiels fermement, et le résultat était que la pente était de "3".

2-2.2 Différenciation de variables ou plus Ensuite, nous différencierons les fonctions avec deux variables ou plus. Pour rendre les variables faciles à comprendre, laissez la fonction être "out" et la variable "x, y, z".
out = x + 2y + 3z\\
 \\


Incliner environ x= 1\\
Inclinez sur y= 2\\
Incliner environ z= 3

Nous calculerons avec Pytorch.

python


x = torch.ones((3,3),requires_grad=True)
y = torch.ones((3,3),requires_grad=True)
z = torch.ones((3,3),requires_grad=True)
out = 1*x+2*y+3*z

out = torch.sum(out)
out.backward()

print('Incliner environ x')
print(x.grad)
print('Inclinez sur y')
print(y.grad)
print('Incliner environ z')
print(z.grad)

résultat


Incliner environ x
tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]])
Inclinez sur y
tensor([[2., 2., 2.],
        [2., 2., 2.],
        [2., 2., 2.]])
Incliner environ z
tensor([[3., 3., 3.],
        [3., 3., 3.],
        [3., 3., 3.]])

2-3.2 Différenciation de la fonction d'ordre Enfin, j'introduirai la différenciation des fonctions quadratiques. La formule a été introduite dans cet article
 \hspace{1mm} y=x^2 + 3  \hspace{5mm} \rightarrow \hspace{5mm} y' = 2x \hspace{2mm}(différentiel)\\
x=Inclinaison à 1\hspace{3mm}y` =2 ・ 1=2\\
x=Inclinaison à 2\hspace{3mm}y` =2 · 2=4

Nous calculerons cela avec Pytorch.

python


a = torch.ones(3,3)
x1 = torch.ones((3,3),requires_grad=True)

x2 = torch.tensor([[2.0,2.0,2.0],
                  [2.0,2.0,2.0],
                  [2.0,2.0,2.0]],requires_grad=True)

b = torch.tensor([[3,3,3],
                  [3,3,3],
                  [3,3,3]])
out1 = a*x1*x1+b
out2 = a*x2*x2+b

out1 = torch.sum(out1)
out2 = torch.sum(out2)

out1.backward()
print("x =Inclinaison à 1")
print(x1.grad)

out2.backward()
print("x =Inclinaison à 2")
print(x2.grad)

résultat


x =Inclinaison à 1
tensor([[2., 2., 2.],
        [2., 2., 2.],
        [2., 2., 2.]])
x =Inclinaison à 2
tensor([[4., 4., 4.],
        [4., 4., 4.],
        [4., 4., 4.]])

Vous pouvez bien le calculer.

3. Enfin Cette fois, j'ai fait une différenciation simple avec Pytorch. Je pense que certaines parties étaient difficiles à comprendre faute d'explications. De plus, j'aimerais ajouter quelque chose comme des exercices et l'améliorer afin que les lecteurs puissent bouger leurs mains et le comprendre. Merci d'avoir lu jusqu'au bout. La prochaine fois, j'aimerais apprendre à construire un réseau de neurones dans Pytorch.

Recommended Posts