Inițializarea straturilor și transfer learning

Introducere în Deep Learning cu PyTorch

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

Inițializarea straturilor

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

$$

  • Ponderile unui strat sunt inițializate cu valori mici
  • Menținerea atât a datelor de intrare, cât și a ponderilor la valori mici asigură ieșiri stabile
Introducere în Deep Learning cu PyTorch

Inițializarea straturilor

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>))
Introducere în Deep Learning cu PyTorch

Transfer learning

  • Reutilizarea unui model antrenat pe o primă sarcină pentru o sarcină similară
    • Model antrenat pe date din SUA privind salariile oamenilor de știință
    • Ponderile sunt folosite pentru antrenarea pe salarii europene

$$

import torch

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

new_layer = torch.load('layer.pth')
Introducere în Deep Learning cu PyTorch

Fine-tuning

  • Un tip de transfer learning
    • Rată de învățare mai mică
    • Antrenarea unei părți din rețea (unele straturi sunt înghețate)
    • Regulă practică: înghețați straturile timpurii și ajustați straturile apropiate de stratul de ieșire
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
Introducere în Deep Learning cu PyTorch

Să exersăm!

Introducere în Deep Learning cu PyTorch

Preparing Video For Download...