def test_scalar_parameter_update(): # float fp = Parameter(0.5, 'fp') fp.set_data(0.8) assert np.array_equal(fp.data.asnumpy(), np.array(0.8, np.float32)) fp.set_data(1) assert np.array_equal(fp.data.asnumpy(), np.array(1.0, np.float32)) int_ = Parameter(1, 'fp') int_.set_data(2) assert np.array_equal(int_.data.asnumpy(), np.array(2, np.int32)) with pytest.raises(TypeError): int_.set_data(1.2) # Tensor fp32 = Tensor(0.5, mstype.float32) int32 = Tensor(2, mstype.int32) fp16 = Tensor(0.6, mstype.float16) int16 = Tensor(3, mstype.int16) bool_ = Tensor(np.array(True, dtype=np.bool_)) # updata_by_tensor fp32_p = Parameter(fp32, 'fp32') fp32_p.set_data(0.8) fp32_p.set_data(1) fp32_p.set_data(int32) fp32_p.set_data(fp32) fp32_p.set_data(int16) fp32_p.set_data(fp16) fp32_p.set_data(bool_) # updata_by_tensor fp16_p = Parameter(fp16, 'fp16') with pytest.raises(TypeError): fp16_p.set_data(fp32)
def test_parameter_lazy_init(): # support lazy init in SEMI_AUTO_PARALLEL mode context.reset_auto_parallel_context() context.set_auto_parallel_context(parallel_mode="semi_auto_parallel", device_num=8) # Call init_data() without set set_data. para = Parameter(initializer('ones', [1, 2, 3], mstype.float32), 'test1') assert isinstance(para.data, Tensor) para = para.init_data() assert isinstance(para.data, Tensor) assert np.array_equal(para.data.asnumpy(), np.ones((1, 2, 3))) # Call init_data() after set_data is set. para = Parameter(initializer('ones', [1, 2, 3], mstype.float32), 'test2') assert isinstance(para.data, Tensor) # expect type error when not init with pytest.raises(TypeError): para.set_data(Tensor(np.zeros((1, 2, 3)))) # init then assign para = para.init_data() # check the type with pytest.raises(TypeError): para.set_data(Tensor(np.zeros((1, 2, 3)))) # check the shape with pytest.raises(ValueError): para.set_data(Tensor(np.zeros((1, 2)))) # expect change ok para.set_data(Tensor(np.zeros((1, 2, 3)).astype(np.float32))) assert np.array_equal(para.data.asnumpy(), np.zeros((1, 2, 3))) para.set_data(initializer('ones', [1, 2, 3], mstype.float32)) assert isinstance(para.data, Tensor) # same object and has inited assert np.array_equal(para.data.asnumpy(), np.ones((1, 2, 3))) # expect no effect. para.init_data() assert np.array_equal(para.data.asnumpy(), np.ones((1, 2, 3))) para.set_data(Tensor(np.zeros((1, 2)).astype(np.float32)), slice_shape=True) assert np.array_equal(para.data.asnumpy(), np.zeros((1, 2))) para.set_data(initializer('ones', [1, 2], mstype.float32), slice_shape=True) assert np.array_equal(para.data.asnumpy(), np.ones((1, 2))) context.reset_auto_parallel_context()
def _load_ms_weight(param: ms.Parameter, data: np.ndarray) -> None: assert param.shape == data.shape param.set_data(ms.Tensor(data, ms.float32))