隐藏层与参数

使用 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 个偏置

N+1

使用 PyTorch 的深度学习入门

参数与模型容量

  • 隐藏层越多 = 参数越多 = 模型容量越高

$$

双层网络代码块

使用 PyTorch 的深度学习入门

参数与模型容量

  • 隐藏层越多 = 参数越多 = 模型容量越高

$$

双层网络代码块

$$

手动计算参数

  • 第一层有 4 个神经元,每个神经元有 8+1 个参数。9 × 4 = 36 个参数
使用 PyTorch 的深度学习入门

参数与模型容量

  • 隐藏层越多 = 参数越多 = 模型容量越高

$$

双层网络代码块

$$

手动计算参数

  • 第一层有 4 个神经元,每个神经元有 8+1 个参数。9 × 4 = 36 个参数
使用 PyTorch 的深度学习入门

参数与模型容量

  • 隐藏层越多 = 参数越多 = 模型容量越高

$$

双层网络代码块

$$

手动计算参数

  • 第一层有 4 个神经元,每个神经元有 8+1 个参数。9 × 4 = 36 个参数
  • 第二层有 2 个神经元,每个神经元有 4+1 个参数。5 × 2 = 10 个参数
使用 PyTorch 的深度学习入门

参数与模型容量

  • 隐藏层越多 = 参数越多 = 模型容量越高

$$

双层网络代码块

$$

手动计算参数

  • 第一层有 4 个神经元,每个神经元有 8+1 个参数。9 × 4 = 36 个参数
  • 第二层有 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...