Schichtinitialisierung und Transfer Learning

Einführung in Deep Learning mit PyTorch

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

Schichtinitialisierung

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

$$

  • Die Gewichte der A-Schicht werden auf kleine Werte initialisiert
  • Indem sowohl die Eingabedaten als auch die Gewichte der Ebenen klein gehalten werden, erzielen wir stabile Ergebnisse
Einführung in Deep Learning mit PyTorch

Schichtinitialisierung

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>))
Einführung in Deep Learning mit PyTorch

Transfer Learning

  • Wiederverwendung eines für eine erste Aufgabe trainierten Modells für eine zweite ähnliche Aufgabe
    • Wir haben ein Modell mit Daten zu Gehältern in der Wissenschaft in den USA
    • Wir haben Gewichte verwendet, um nach europäischen Gehältern zu trainieren

$$

import torch

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

new_layer = torch.load('layer.pth')
Einführung in Deep Learning mit PyTorch

Feinabstimmung

  • Eine Art des Transfer Learning
    • Kleinere Lernrate
    • Trainieren Teil des Netzes (wir frieren einige ein )
    • Faustregel: Die frühen Schichten des Netzes einfrieren und die Schichten, die näher an der Ausgabeschicht liegen, feinabstimmen
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
Einführung in Deep Learning mit PyTorch

Probieren wir es aus!

Einführung in Deep Learning mit PyTorch

Preparing Video For Download...