MindSpore实现Swin Transformer时遇到ms.common.initializer.Constant(0.0)(m.bias)不起初始化改变数值的作用

1.系统环境

硬件环境(Ascend/GPU/CPU): GPU
MindSpore版本: mindspore=2.0
执行模式(PyNative/ Graph):不限
Python版本:3.7
操作系统平台:Linux

2. 问题描述

ms.common.initializer.Constant(0.0)(m.bias)不起初始化改变数值的作用

def init_normal(m):  
    if type(m) == nn.Dense:  
        m.weight.set_data(initializer(Normal(sigma=0.01,mean=0,m.weight.shape,m.weight.dtype)))  
        print(m.bias.value())  
        ms.common.initialzer.Constant(0.0)(m.bias)  
        print(m.bias.value())  
        print('ok')  
    
net.apply(init_normal)  
net[0].weight.data[0],net[0].bias.data[0]

3. 解决方案

首先调用内置的初始化器,将所有权重参数初始化为标准差为0.01的高斯随机变量,且将偏置参数设置为0。

form mindspore.common.initializer import initializer,Normal,Constant  
    
def init_normal(m):  
    if type(m) == nn.Dense:  
        m.weight.set_data(initializer(Normal(sigma=0.01,mean=0,m.weight.shape,m.weight.dtype)))  
        m.bias.set_data(initializer(Constant(0.0),m.bias.shape,m.bias.dtype))  
    
net.apply(init_normal)  
net[0].weight.data[0],net[0].bias.data[0]