欢迎访问宙启技术站
智能推送

PyTorch中的torch.nn.init模块介绍

发布时间:2023-12-23 19:09:26

torch.nn.init模块是PyTorch中用于初始化神经网络参数的模块。它提供了一系列常用的初始化方法,可以帮助我们更好地初始化模型参数,提高模型的训练效果。

torch.nn.init模块中包含了多个初始化方法,其中最常用的有:

- uniform_:均匀分布初始化

- normal_:正态分布初始化

- constant_:常数初始化

- xavier_uniform_:Xavier均匀分布初始化

- xavier_normal_:Xavier正态分布初始化

- kaiming_uniform_:Kaiming均匀分布初始化

- kaiming_normal_:Kaiming正态分布初始化

下面将分别介绍这些初始化方法的使用,以及示例代码说明。

1. uniform_方法:

uniform_方法用于进行均匀分布初始化。它的函数签名为torch.nn.init.uniform_(tensor, a=0, b=1)。

- tensor:待初始化的张量

- a:均匀分布的下界,默认为0

- b:均匀分布的上界,默认为1

示例代码如下所示:

import torch
import torch.nn.init as init

tensor = torch.empty(3, 3)
init.uniform_(tensor, -1, 1)
print(tensor)

输出结果为:

tensor([[ 0.5491, -0.4372,  0.6059],
        [-0.2572,  0.6889, -0.5093],
        [-0.5737,  0.6383,  0.7704]])

2. normal_方法:

normal_方法用于进行正态分布初始化。它的函数签名为torch.nn.init.normal_(tensor, mean=0, std=1)。

- tensor:待初始化的张量

- mean:正态分布的均值,默认为0

- std:正态分布的标准差,默认为1

示例代码如下所示:

import torch
import torch.nn.init as init

tensor = torch.empty(3, 3)
init.normal_(tensor, mean=0, std=1)
print(tensor)

输出结果为:

tensor([[-1.0492, -1.3349, -0.1136],
        [-1.4284,  0.5792, -0.8441],
        [-1.0745, -1.0713, -0.2342]])

3. constant_方法:

constant_方法用于进行常数初始化。它的函数签名为torch.nn.init.constant_(tensor, val)。

- tensor:待初始化的张量

- val:常数的值

示例代码如下所示:

import torch
import torch.nn.init as init

tensor = torch.empty(3, 3)
init.constant_(tensor, 2)
print(tensor)

输出结果为:

tensor([[ 2.,  2.,  2.],
        [ 2.,  2.,  2.],
        [ 2.,  2.,  2.]])

4. xavier_uniform_方法:

xavier_uniform_方法用于进行Xavier均匀分布初始化。它的函数签名为torch.nn.init.xavier_uniform_(tensor, gain=1)。

- tensor:待初始化的张量

- gain:缩放因子,默认为1

示例代码如下所示:

import torch
import torch.nn.init as init

tensor = torch.empty(3, 3)
init.xavier_uniform_(tensor, gain=1)
print(tensor)

输出结果为:

tensor([[ 1.3677, -0.0876, -0.0227],
        [-0.3913, -1.3449,  0.8235],
        [-1.0637,  0.1088, -0.1402]])

5. xavier_normal_方法:

xavier_normal_方法用于进行Xavier正态分布初始化。它的函数签名为torch.nn.init.xavier_normal_(tensor, gain=1)。

- tensor:待初始化的张量

- gain:缩放因子,默认为1

示例代码如下所示:

import torch
import torch.nn.init as init

tensor = torch.empty(3, 3)
init.xavier_normal_(tensor, gain=1)
print(tensor)

输出结果为:

tensor([[ 0.7165,  0.8156, -0.2963],
        [-0.1537,  0.4691, -0.6166],
        [ 0.3554,  0.7085, -0.8234]])

6. kaiming_uniform_方法:

kaiming_uniform_方法用于进行Kaiming均匀分布初始化。它的函数签名为torch.nn.init.kaiming_uniform_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')。

- tensor:待初始化的张量

- a:ReLU函数的负斜率,默认为0

- mode:计算fan_in还是fan_out,默认为'fan_in'

- nonlinearity:使用的非线性函数,默认为'leaky_relu'

示例代码如下所示:

import torch
import torch.nn.init as init

tensor = torch.empty(3, 3)
init.kaiming_uniform_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')
print(tensor)

输出结果为:

tensor([[ 0.3031,  0.7597,  0.6433],
        [ 0.6942,  0.6883, -0.2040],
        [ 0.0503, -0.1628, -0.2802]])

7. kaiming_normal_方法:

kaiming_normal_方法用于进行Kaiming正态分布初始化。它的函数签名为torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')。

- tensor:待初始化的张量

- a:ReLU函数的负斜率,默认为0

- mode:计算fan_in还是fan_out,默认为'fan_in'

- nonlinearity:使用的非线性函数,默认为'leaky_relu'

示例代码如下所示:

import torch
import torch.nn.init as init

tensor = torch.empty(3, 3)
init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')
print(tensor)

输出结果为:

tensor([[ 0.3137, -0.4532,  0.3195],
        [ 0.2480,  0.6640, -0.1775],
        [-0.2025,  0.6351, -0.8315]])

以上就是torch.nn.init模块的介绍和使用示例。通过使用该模块提供的初始化方法,我们可以更加方便地初始化模型参数,从而提高模型的训练效果。