Inicialização de camadas e aprendizado por transferência

Introdução ao Aprendizado Profundo com o PyTorch

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

Inicialização de camadas

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

$$

  • Pesos da camada A são inicializados com valores pequenos
  • Manter dados de entrada e pesos das camadas pequenos garante resultados estáveis
Introdução ao Aprendizado Profundo com o PyTorch

Inicialização de camadas

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>))
Introdução ao Aprendizado Profundo com o PyTorch

Aprendizado por transferência

  • Reutilizar modelo treinado na primeira tarefa para uma segunda tarefa semelhante
    • Treinou modelo com dados dos EUA salários de cientistas
    • Usa pesos para treinar com os salários europeus

$$

import torch

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

new_layer = torch.load('layer.pth')
Introdução ao Aprendizado Profundo com o PyTorch

Ajuste fino

  • Um tipo de aprendizado por transferência
    • Menor taxa de aprendizado
    • Treina parte da rede ( congelamos alguns deles)
    • Regra geral: congele camadas iniciais da rede e faça ajuste fino das camadas próximas da camada de saída
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
Introdução ao Aprendizado Profundo com o PyTorch

Vamos praticar!

Introdução ao Aprendizado Profundo com o PyTorch

Preparing Video For Download...