Initialisation des couches et transfert d'apprentissage

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
  • Garder des entrées et des poids petits assure des sorties 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

Transfert d'apprentissage

  • Réutiliser un modèle entraîné sur une première tâche pour une seconde tâche similaire
    • Modèle entraîné sur des salaires de scientifiques des données aux États-Unis
    • Utiliser ces poids pour entraîner sur des 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

Ajustement fin

  • Un type de transfert d'apprentissage
    • Taux d'apprentissage plus petit
    • Entraîner une partie du réseau (on en « gèle » certains)
    • Règle générale : geler les couches initiales et ajuster finement celles proches de la sortie
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...