層初始化與遷移學習

使用 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 的深度學習入門

微調(Fine-tuning)

  • 遷移學習的一種做法
    • 較小的學習率
    • 只訓練部分網路(其餘凍結
    • 經驗法則:凍結較前面的層,微調靠近輸出層的層
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...