# MindSpore报错AttributeError: 'Parameter' object has no attribute 'uniform\_'

**1. 系统环境**

硬件环境\(Ascend/GPU/CPU\): Ascend/GPU/CPU

软件环境: MindSpore 版本: 2.0.0

执行模式（静态图/动态图）： 不限

Python 版本: 3.7.6

操作系统平台: linux

**2. 报错信息**

2.1 问题描述

将pytorch转换成mindspore代码的过程中报错AttributeError: 'Parameter' object has no attribute 'uniform\_'，按照官方文档，将其中的self.parameters\(\)改成了mindspore中nn.Cell模块里面的get\_parameters\(\)方法，返回的也是迭代器。

2.2 脚本信息

```
def init_parameters(self):
    init_range = 0.1
    for param in self.parameters():
        param.data.uniform_(-init_range, init_range)
```

**3. 根因分析**

Parameter是Tensor的子类。 mindspore中的操作会创建一个新的Tensor, 不会修改Tensor原本的值。要想改变  [具体看文档](https://www.mindspore.cn/docs/zh-CN/r2.0/api_python/mindspore/mindspore.Tensor.html#mindspore.Tensor)  例如:

```
import mindspore as ms
from mindspore import mint, nn, ops

a = mint.ones((2, 2))
b = a.mean()
print(a)
print(b)
```

要想改变Parameter的内容必须用赋值。

**4. 解决方案**

方案一：

```
import mindspore as ms
from mindspore import mint, nn, ops


# a = mint.ones((2, 2))
# b = a.mean()
# print(a)
# print(b)


class Net(nn.Cell):
    def __init__(self):
        super().__init__()
        self.dense = nn.Dense(2, 3)

    def init_parameters(self):
        init_range = ms.Tensor(0.1)
        param: ms.Parameter
        for param in self.get_parameters():
            param = ops.uniform(param.shape, -init_range, init_range)

net = Net()
net.init_parameters()
print(net.dense.weight.asnumpy())
```

方案二：

在mindspore=2.4版本中已提供如对标torch.uniform\_接口，接口为：[mindspore.ops.uniform](https://www.mindspore.cn/docs/zh-CN/r2.4.10/api_python/ops/mindspore.ops.uniform.html)，请参考使用。

