Inicialización de capas y aprendizaje por transferencia

Introducción al aprendizaje profundo con PyTorch

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

Inicialización de capas

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

$$

  • Los pesos de la capa A se inicializan con valores pequeños
  • Mantener pequeños tanto los datos de entrada como los pesos de las capas garantiza resultados estables
Introducción al aprendizaje profundo con PyTorch

Inicialización de capas

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>))
Introducción al aprendizaje profundo con PyTorch

Aprendizaje por transferencia

  • Reutilizar un modelo entrenado en una primera tarea para una segunda tarea similar
    • Entrenar un modelo con datos salariales de científicos de datos de EE. UU.
    • Utilizar pesos para entrenar con salarios europeos

$$

import torch

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

new_layer = torch.load('layer.pth')
Introducción al aprendizaje profundo con PyTorch

Ajuste fino

  • Un tipo de aprendizaje por transferencia
    • Tasa de aprendizaje inferior
    • Entrenar parte de la red ( congelamos a algunos de ellos)
    • Regla general: congelar las primeras capas de la red y ajustar las capas más cercanas a la capa de salida
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
Introducción al aprendizaje profundo con PyTorch

¡Vamos a practicar!

Introducción al aprendizaje profundo con PyTorch

Preparing Video For Download...