Laag-initialisatie en transfer learning

Introductie tot Deep Learning met PyTorch

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

Laag-initialisatie

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>))

$$

  • Gewichten van een laag starten met kleine waarden
  • Kleine inputs én kleine gewichten houden outputs stabiel
Introductie tot Deep Learning met PyTorch

Laag-initialisatie

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>))
Introductie tot Deep Learning met PyTorch

Transfer learning

  • Een model voor een tweede, vergelijkbare taak hergebruiken
    • Model getraind op salarissen van data scientists in de VS
    • Gewichten hergebruiken voor Europese salarissen

$$

import torch

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

new_layer = torch.load('layer.pth')
Introductie tot Deep Learning met PyTorch

Fine-tuning

  • Een vorm van transfer learning
    • Kleinere learning rate
    • Train een deel van het netwerk (we freezen sommige lagen)
    • Vuistregel: bevriest vroege lagen, fine-tune lagen dichter bij de outputlaag
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
Introductie tot Deep Learning met PyTorch

Laten we oefenen!

Introductie tot Deep Learning met PyTorch

Preparing Video For Download...