层初始化与迁移学习

使用 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 的深度学习入门

Ayo berlatih!

使用 PyTorch 的深度学习入门

Preparing Video For Download...