Инициализация слоёв и трансферное обучение

Введение в глубокое обучение с PyTorch

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

Инициализация слоёв

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

$$

  • Веса слоя инициализируются малыми значениями
  • Малые значения входных данных и весов обеспечивают стабильные выходы
Введение в глубокое обучение с PyTorch

Инициализация слоёв

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>))
Введение в глубокое обучение с PyTorch

Трансферное обучение

  • Повторное использование модели, обученной на одной задаче, для другой схожей задачи
    • Обучили модель на данных о зарплатах специалистов по данным в США
    • Применяем веса для обучения на данных о европейских зарплатах

$$

import torch

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

new_layer = torch.load('layer.pth')
Введение в глубокое обучение с PyTorch

Дообучение

  • Разновидность трансферного обучения
    • Меньшая скорость обучения
    • Обучаем часть сети (некоторые слои замораживаем)
    • Практическое правило: замораживайте ранние слои и дообучайте слои, ближайшие к выходному
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
Введение в глубокое обучение с PyTorch

Давайте потренируемся!

Введение в глубокое обучение с PyTorch

Preparing Video For Download...