隱藏層與參數

使用 PyTorch 的深度學習入門

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

用 nn.Sequential() 疊層

# Create network with three linear layers
model = nn.Sequential(

nn.Linear(n_features, 8),
nn.Linear(8, 4), nn.Linear(4, n_classes)
)
  • 輸入依序通過線性層
  • nn.Sequential() 中的層是隱藏層
使用 PyTorch 的深度學習入門

用 nn.Sequential() 疊層

# Create network with three linear layers
model = nn.Sequential(
    nn.Linear(n_features, 8), # n_features represents number of input features
    nn.Linear(8, 4),
    nn.Linear(4, n_classes) # n_classes represents the number of output classes  
)
  • 輸入依序通過線性層
  • nn.Sequential() 中的層是隱藏層
  • n_featuresn_classes 由資料集決定
使用 PyTorch 的深度學習入門

新增層

含兩個隱藏層的神經網路示意圖

使用 PyTorch 的深度學習入門

新增層

含四個隱藏層的神經網路示意圖

使用 PyTorch 的深度學習入門

新增層

含四個隱藏層的神經網路示意圖

使用 PyTorch 的深度學習入門

新增層

含四個隱藏層的神經網路示意圖

使用 PyTorch 的深度學習入門

新增層

# Create network with three linear layers
model = nn.Sequential(
    nn.Linear(10, 18),
    nn.Linear(18, 20),
    nn.Linear(20, 5)
)
使用 PyTorch 的深度學習入門

新增層

# Create network with three linear layers
model = nn.Sequential(
    nn.Linear(10, 18), # Takes 10 features and outputs 18
    nn.Linear(18, 20),
    nn.Linear(20, 5)
)
  • 輸入 10 ➡ 輸出 18 ➡ 輸出 20 ➡ 輸出 5
使用 PyTorch 的深度學習入門

新增層

# Create network with three linear layers
model = nn.Sequential(
    nn.Linear(10, 18),
    nn.Linear(18, 20), # Takes 18 and outputs 20
    nn.Linear(20, 5)
)
  • 輸入 10 ➡ 輸出 18 ➡ 輸出 20 ➡ 輸出 5
使用 PyTorch 的深度學習入門

新增層

# Create network with three linear layers
model = nn.Sequential(
    nn.Linear(10, 18),
    nn.Linear(18, 20),
    nn.Linear(20, 5) # Takes 20 and outputs 5
)
  • 輸入 10 ➡ 輸出 18 ➡ 輸出 20 ➡ 輸出 5
使用 PyTorch 的深度學習入門

層由神經元組成

$$

  • 當每個神經元都連到前一層的所有神經元時,稱為 全連接

輸入層與輸出層,以箭頭連接的示意圖

使用 PyTorch 的深度學習入門

層由神經元組成

$$

  • 當每個神經元都連到前一層的所有神經元時,稱為 全連接

$$

  • 線性層中的一個神經元:

輸入層與輸出層,以箭頭連接並圈選一個輸出神經元

使用 PyTorch 的深度學習入門

層由神經元組成

$$

  • 當每個神經元都連到前一層的所有神經元時,稱為 全連接

$$

  • 線性層中的一個神經元:
    • 使用前一層的所有神經元做線性運算

輸入層與輸出層,以箭頭連接並圈選一個輸出神經元且高亮部分連線

使用 PyTorch 的深度學習入門

層由神經元組成

$$

  • 當每個神經元都連到前一層的所有神經元時,稱為 全連接

$$

  • 線性層中的一個神經元:
    • 使用前一層的所有神經元做線性運算
    • 共有 N+1 個參數:N 個來自輸入,另 1 個為偏差(bias)

N+1

使用 PyTorch 的深度學習入門

參數與模型容量

  • 隱藏層越多=參數越多=模型容量越高

$$

雙層網路的程式碼區塊

使用 PyTorch 的深度學習入門

參數與模型容量

  • 隱藏層越多=參數越多=模型容量越高

$$

雙層網路的程式碼區塊

$$

手動計算參數

  • 第 1 層有 4 個神經元,每個有 8+1 個參數。9 乘以 4 = 36 個參數
使用 PyTorch 的深度學習入門

參數與模型容量

  • 隱藏層越多=參數越多=模型容量越高

$$

雙層網路的程式碼區塊

$$

手動計算參數

  • 第 1 層有 4 個神經元,每個有 8+1 個參數。9 乘以 4 = 36 個參數
使用 PyTorch 的深度學習入門

參數與模型容量

  • 隱藏層越多=參數越多=模型容量越高

$$

雙層網路的程式碼區塊

$$

手動計算參數

  • 第 1 層有 4 個神經元,每個有 8+1 個參數。9 乘以 4 = 36 個參數
  • 第 2 層有 2 個神經元,每個有 4+1 個參數。5 乘以 2 = 10 個參數
使用 PyTorch 的深度學習入門

參數與模型容量

  • 隱藏層越多=參數越多=模型容量越高

$$

雙層網路的程式碼區塊

$$

手動計算參數

  • 第 1 層有 4 個神經元,每個有 8+1 個參數。9 乘以 4 = 36 個參數
  • 第 2 層有 2 個神經元,每個有 4+1 個參數。5 乘以 2 = 10 個參數
  • 36 + 10 = 46 個可學習參數
使用 PyTorch 的深度學習入門

參數與模型容量

  • 隱藏層越多=參數越多=模型容量越高

$$

雙層網路的程式碼區塊

$$

使用 PyTorch

  • .numel():回傳張量中的元素數
total = 0
for parameter in model.parameters():
    total += parameter.numel()
print(total)
46
使用 PyTorch 的深度學習入門

權衡複雜度與效率

在複雜度與效率間取得平衡

使用 PyTorch 的深度學習入門

一起來練習吧!

使用 PyTorch 的深度學習入門

Preparing Video For Download...