Inicjalizacja warstw i transfer wiedzy

Wprowadzenie do uczenia głębokiego z PyTorch

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

Inicjalizacja warstwy

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

$$

  • Wagi warstwy są inicjalizowane małymi wartościami
  • Małe wartości danych wejściowych i wag zapewniają stabilne wyniki
Wprowadzenie do uczenia głębokiego z PyTorch

Inicjalizacja warstwy

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>))
Wprowadzenie do uczenia głębokiego z PyTorch

Transfer wiedzy

  • Ponowne wykorzystanie modelu wytrenowanego na pierwszym zadaniu do podobnego zadania
    • Model wytrenowany na danych o zarobkach naukowców w USA
    • Wagi użyte do trenowania na zarobkach europejskich

$$

import torch

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

new_layer = torch.load('layer.pth')
Wprowadzenie do uczenia głębokiego z PyTorch

Dostrajanie modelu

  • Rodzaj transferu wiedzy
    • Mniejszy współczynnik uczenia
    • Trenowanie części sieci (niektóre warstwy są zamrażane)
    • Zasada: zamrażaj wczesne warstwy sieci i dostrajaj warstwy bliżej wyjścia
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
Wprowadzenie do uczenia głębokiego z PyTorch

Czas na ćwiczenia!

Wprowadzenie do uczenia głębokiego z PyTorch

Preparing Video For Download...