[PYTHON] [PyTorch] APPRENTISSAGE DE TRANSFERT POUR LA VISION INFORMATIQUE

introduction

TRANSFER LEARNING FOR INFORMATIQUE VISION STRUCT Qu'est-ce que c'est dans le code de (1)? J'ai écrit un article parce que je voulais résumer ce que je pensais. Si vous faites une erreur, je vous serais reconnaissant de bien vouloir commenter.

optimizer.zero_grad()

C'est une ligne discrètement dans train_model function, mais c'est une fonction assez importante pour initialiser l'accumulation de dégradés. .. Si le gradient est accumulé sans initialisation, il ne convergera pas. Lors de la mise à jour du poids $ W $, il est basé sur la méthode de descente la plus raide

W = W - \eta \frac{\partial L}{\partial W}

De cette formule

\frac{\partial L}{\partial W}

Cette partie est le dégradé. $ \ Eta $ est le taux d'apprentissage. Par conséquent, ```optimizer.zero_grad () `` `est requis lors de l'apprentissage.

set_grad_enabled() fonction train_model est une fonction appelée comme une clause with. Après avoir vérifié qu'il n'y a pas de problème de calcul sans cela, [Créer un graphe de calcul](https://discuss.pytorch.org/t/why-we-need-torch-set-grad-enabled-false-here / 41240) Dans (2), la propagation vers l'avant et la propagation arrière sont nécessaires pendant l'apprentissage, mais la propagation arrière n'est pas utilisée pendant l'évaluation, de sorte que l'on pense que le but est de réduire la quantité de calcul. Puisque j'utilise la clause with, est-ce lié à la sécurisation de la mémoire?

running_loss += loss.item() * inputs.size(0) La première fois que vous le voyez dans la fonction train_model? C'est une ligne qui devient. En premier lieu dans la définition de la fonction de perte

criterion = nn.CrossEntropyLoss()
loss = criterion(outputs, labels)

Si vous regardez CrossEntropyLoss, l'argument est reduction = 'mean'``` Il y a. En d'autres termes, puisque la valeur de perte moyenne est renvoyée par défaut, il n'y a pas de problème avec l'apprentissage par lots, mais avec l'apprentissage par mini-lots, il est nécessaire de passer de la valeur moyenne (moyenne) à la somme (somme). Donc,

running_loss += loss.item() * inputs.size(0)

La valeur de perte moyenne d'un mini-lot petit et difficile est multipliée par le nombre d'échantillons du mini-lot pour le ramener à la valeur d'origine. Au fait, même si tu ne fais pas ça

criterion = nn.CrossEntropyLoss(reduction='sum')

Renvoie le même résultat que `` loss.item () * inputs.size (0) ''. Alors

#running_loss += loss.item() * inputs.size(0)
running_loss += loss.item()

Vous pouvez l'écrire docilement sans rien faire d'étrange. Pour le moment, il est également mentionné dans ici (3).

Postscript (11/03/2020)

criterion = nn.CrossEntropyLoss(reduction='sum')Après avoir trouvé la valeur de perte avec, la rétropropagation donne nan.[punaise](https://github.com/pytorch/pytorch/issues/17350)(4)Il semble y avoir.


 Alors soyez doux '' `` running_loss + = loss.item () * inputs.size (0) '' `` Cela peut être préférable d'utiliser

## à la fin
 Je continuerai d'écrire quand il y aura plus d'endroits à craindre.


## Matériel de référence
(1) [TRANSFER LEARNING FOR COMPUTER VISION TUTORIAL](https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html?highlight=transfer%20learning)
(2) [Why we need torch.set_grad_enabled(False) here?](https://discuss.pytorch.org/t/why-we-need-torch-set-grad-enabled-false-here/41240)
(3) [Issue about updating training loss #2](https://github.com/udacity/deep-learning-v2-pytorch/issues/2)
(4) [torch.nn.CrossEntropyLoss with "reduction" sum/mean is not deterministic on segmentation outputs / labels #17350](https://github.com/pytorch/pytorch/issues/17350)


Recommended Posts

[PyTorch] APPRENTISSAGE DE TRANSFERT POUR LA VISION INFORMATIQUE
Renforcer l'apprentissage de la troisième ligne
Préparation du jeu de données pour PyTorch
Résumé de l'apprentissage RAPIDS
Ensemble de données pour l'apprentissage automatique
Prétraitement japonais pour l'apprentissage automatique
Flux d'apprentissage pour les débutants en Python
Plan d'apprentissage Python pour l'apprentissage de l'IA
Implémenter le transfert de style avec Pytorch
Mémorandum d'apprentissage pour moi w
Apprentissage profond pour la formation composée?
Démineur d'apprentissage automatique avec PyTorch
[PyTorch] Augmentation des données pour la segmentation
La recommandation de Checkio pour apprendre Python
Apprentissage automatique avec docker (42) Programmation PyTorch pour l'apprentissage en profondeur par Ian Pointer