一、随机初始化
W=0.01*np.random.randn(Din,Dout)
生成一个服从标准正态分布的初始值。
pytorch实现:
torch.nn.init.uniform(tensor, a=0, b=1)
从均匀分布U(a, b)中生成值,填充输入的张量或变量
torch.nn.init.normal(tensor, mean=0, std=1)
从给定均值和标准差的正态分布N(mean, std)中生成值,填充输入的张量或变量
二、Xavier初始化
Xavier初始化通过保持输入和输出的方差一致(服从相同的分布)避免梯度消失和梯度爆炸问题
W=np.random.randn(Din,Dout)/np.sqrt(Din)
适用于tanh激活函数
pytorch实现:
fan_in = kernel_size[0] * kernel_size[1] * in_channels
fan_out = kernel_size[0] * kernel_size[1] * out_channels
三、He Kaiming 初始化
ReLU网络每一层有一半的神经元被激活,另一半为0(x负半轴中是不激活的),所以要保持variance不变,只需要在Xavier的基础上再除以2。
W=np.random.randn(Din,Dout)/np.sqrt(Din/2)
适用于Relu激活函数