1 系统环境
硬件环境(Ascend/GPU/CPU): Ascend/GPU/CPU
MindSpore版本: mindspore=2.3.0rc1
执行模式(PyNative/ Graph):不限
Python版本: Python=3.9
操作系统平台: 不限
2 报错信息
2.1 问题描述
y没有成功复制x而是变成了0。如果把x换成普通的Tensor就没问题。
2.2 脚本信息
from mindspore.common.initializer import initializer
n, m = 5, 3
x = initializer(init='normal', shape=(n, m))
y = x.copy()
print(x)
print(y)
输出如下:
[[-9.8994775e-03 -2.8827513e-05 -1.1877520e-02]
[-2.8584851e-03 -1.4535164e-02 -1.7329855e-02]
[-1.1603085e-03 2.8330029e-04 -8.1528882e-03]
[-1.4099754e-02 -1.1020763e-02 3.4321868e-03]
[ 1.7921604e-02 1.4062168e-02 -4.5925970e-03]]
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
3 根因分析
查看API文档
mindspore.common.initializer
有一个说明:
说明
Initializer本意是用于在并行模式中延迟Tensor的数据的初始化,而非初始化Tensor。如果必须使用Initializer来初始化Tensor,大多情况下需要在初始化之后使用 mindspore.Tensor.init_data() 。
4 解决方案
调用初始化接口 Tensor.init_data()
mindspore.Tensor.init_data
代码如下:
from mindspore.common.initializer import initializer
n, m = 5, 3
x = initializer(init='normal', shape=(n, m))
x.init_data()
y = x.copy()
print(x)
print(y)
结果如下:
[[ 0.00939345 0.00237236 -0.01005815]
[-0.00203028 0.00010801 0.00289919]
[ 0.00403657 -0.00706848 0.00969519]
[ 0.01585527 -0.01843719 -0.01486818]
[ 0.00146939 -0.00700254 -0.00083044]]
[[ 0.00939345 0.00237236 -0.01005815]
[-0.00203028 0.00010801 0.00289919]
[ 0.00403657 -0.00706848 0.00969519]
[ 0.01585527 -0.01843719 -0.01486818]
[ 0.00146939 -0.00700254 -0.00083044]]