Initialisation des couches et apprentissage par transfert

Introduction au deep learning avec PyTorch

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

Initialisation des couches

import torch.nn as nn

layer = nn.Linear(64, 128)
print(layer.weight.min(), layer.weight.max())
(tensor(-0.1250, grad_fn=<MinBackward1>), tensor(0.1250, grad_fn=<MaxBackward1>))

$$

  • Les poids d’une couche sont initialisés à de petites valeurs
  • Le fait que les données d’entrée et les poids des couches soient petits permet d’obtenir des résultats stables.
Introduction au deep learning avec PyTorch

Initialisation des couches

import torch.nn as nn

layer = nn.Linear(64, 128)
nn.init.uniform_(layer.weight)

print(layer.weight.min(), layer.weight.max())
(tensor(0.0002, grad_fn=<MinBackward1>), tensor(1.0000, grad_fn=<MaxBackward1>))
Introduction au deep learning avec PyTorch

Apprentissage par transfert

  • Réutilisation d’un modèle entraîné sur une première tâche pour une seconde tâche similaire
    • Entraînement d’un modèle sur les salaires des data scientists aux États-Unis
    • Utilisation des poids pour entraînement sur les salaires européens

$$

import torch

layer = nn.Linear(64, 128)
torch.save(layer, 'layer.pth')

new_layer = torch.load('layer.pth')
Introduction au deep learning avec PyTorch

Affinage

  • Un type d’apprentissage par transfert
    • Taux d’apprentissage plus faible
    • Entraîner une partie du réseau (nous gelons certaines paramètres)
    • Règle empirique : figer les premières couches, ajuster les dernières
import torch.nn as nn

model = nn.Sequential(nn.Linear(64, 128),
                      nn.Linear(128, 256))

for name, param in model.named_parameters():
    if name == '0.weight':
        param.requires_grad = False
Introduction au deep learning avec PyTorch

Passons à la pratique !

Introduction au deep learning avec PyTorch

Preparing Video For Download...