参数初始化

我们在构建网络之后,网络中的参数是需要初始化的。我们需要初始化的参数主要有权重和偏置,偏置参数一般初始化为 0 即可,而对权重的初始化则会更加重要,我们介绍在 PyTorch 中为神经网络进行初始化的方法。

1. 常见初始化方法

  • 均匀分布初始化

均匀分布初始化,权重参数初始化从区间均匀随机取值。
即在(-1/√d,1/√d)均匀分布中生成当前神经元的权重,其中d为每个神经元的输入数量。

  • 正态分布初始化

正态分布初始化, 随机初始化从均值为0,标准差是1的高斯分布中取样,使用一些很小的值对参数W进行初始化.

  • 全0初始化

全0初始化,将神经网络中的所有权重参数初始化为 0.
特征的权重不选择全0初始化,bias可以选择全零初始化

  • 全1初始化

全1初始化,将神经网络中的所有权重参数初始化为 1.

  • 固定值初始化

固定值初始化,将神经网络中的所有权重参数初始化为某个固定值.

  • kaiming初始化(HE初始化)

kaiming 初始化,也叫做 HE 初始化.
HE 初始化分为正态分布的 HE 初始化、均匀分布的 HE 初始化.

  • xavier初始化

xavier 初始化,也叫做Glorot初始化,该方法的基本思想是各层的激活值和梯度的方差在传播过程中保持一致。
它有两种,一种是正态分布的 xavier 初始化、一种是均匀分布的 xavier 初始化.

2. 初始化方法API

  • 导入用到的包或者库
接下来,我们使用 PyTorch 调用相关 API:
import torch
import torch.nn.functional as F # torch中的函数包
import torch.nn as nn
  • 均匀分布初始化
# 1. 均匀分布随机初始化
# 1. 均匀分布初始化
def test01():

    # 初始化一个线性层模型,特征维度是5,输出维度是3
    linear = nn.Linear(5, 3)
    # 对模型的参数进行初始化
    print(linear.weight)
    # 传入model.weight
    nn.init.uniform_(linear.weight)
    print(linear.weight)

在这里插入图片描述

  • 固定值初始化
# 2. 固定初始化
def test02():
	# 模型
    linear = nn.Linear(5, 3)
    # 初始化
    nn.init.constant_(linear.weight, 5)
    print(linear.weight.data)
  • 全0初始化
# 3. 全0初始化
def test03():

    linear = nn.Linear(5, 3)
    nn.init.zeros_(linear.weight)
    print(linear.weight.data)
  • 全1初始化
# 4. 全1初始化
def test04():

    linear = nn.Linear(5, 3)
    nn.init.ones_(linear.weight)
    print(linear.weight.data)
  • 正态分布初始化
# 5. 正态分布随机初始化
def test05():

    linear = nn.Linear(5, 3)
    # 指定均值和方差
    nn.init.normal_(linear.weight, mean=0, std=1)
    print(linear.weight.data)
  • Kaiming初始化
# 6. kaiming 初始化
def test06():

    # kaiming 正态分布初始化
    linear = nn.Linear(5, 3)
    nn.init.kaiming_normal_(linear.weight)
    print(linear.weight.data)

    # kaiming 均匀分布初始化
    linear = nn.Linear(5, 3)
    nn.init.kaiming_uniform_(linear.weight)
    print(linear.weight.data)
  • xavier初始化
# 7. xavier 初始化
def test07():

    # xavier 正态分布初始化
    linear = nn.Linear(5, 3)
    nn.init.xavier_normal_(linear.weight)
    print(linear.weight.data)

    # xavier 均匀分布初始化
    linear = nn.Linear(5, 3)
    nn.init.xavier_uniform_(linear.weight)
    print(linear.weight.data)

一般我们在使用 PyTorch 构建网络模型时,每个网络层的参数都有默认的初始化方法,优先选择kaming的初始化,xavier初始化方式。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐