比较与torch.normal的差异
torch.normal
torch.normal(mean, std, *, generator=None, out=None)
torch.normal(mean=0.0, std, *, out=None)
torch.normal(mean, std=1.0, *, out=None)
torch.normal(mean, std, size, *, out=None)
更多内容详见torch.normal。
mindspore.ops.normal
mindspore.ops.normal(shape, mean, stddev, seed=None)
更多内容详见mindspore.ops.normal。
差异对比
MindSpore此API功能与PyTorch一致。
PyTorch: 支持四种接口用法。
- mean和- std均为Tensor,要求- mean和- std的成员数量一致,返回值shape和- mean一致。
- mean为float类型,- std为Tensor,返回值shape和- std一致。
- std为float类型,- mean为Tensor,返回值shape和- mean一致。
- mean和- std均为float类型,返回值shape和- size一致。
MindSpore: mean 和 std 支持的数据类型是Tensor,返回值的shape由 shape , mean , stddev 三者广播得到。
| 分类 | 子类 | PyTorch | MindSpore | 差异 | 
|---|---|---|---|---|
| 参数 | 参数 1 | - | shape | MindSpore下用于和  | 
| 参数 2 | mean | mean | MindSpore下支持的数据类型是Tensor。PyTorch下支持Tensor、float,对应不同用法 | |
| 参数 3 | std | stddev | MindSpore下支持的数据类型是Tensor。PyTorch下支持Tensor、float,对应不同用法 | |
| 参数 4 | generator | seed | MindSpore使用随机数种子生成随机数 | |
| 参数 5 | size | - | 详见通用差异参数表 | |
| 参数 6 | out | - | 详见通用差异参数表 | 
代码示例 1
PyTorch下
mean和std均为Tensor的场景。
# PyTorch
import torch
import numpy as np
mean = torch.tensor(np.array([[3, 4], [5, 6]]), dtype=torch.float32)
stddev = torch.tensor(np.array([[0.2, 0.3], [0.4, 0.5]]), dtype=torch.float32)
output = torch.normal(mean, stddev)
print(output.shape)
# torch.Size([2, 2])
# MindSpore
import mindspore as ms
import numpy as np
shape = (2, 2)
mean = ms.Tensor(np.array([[3, 4], [5, 6]]), ms.float32)
stddev = ms.Tensor(np.array([[0.2, 0.3], [0.4, 0.5]]), ms.float32)
output = ms.ops.normal(shape, mean, stddev)
print(output.shape)
# (2, 2)
代码示例 2
PyTorch下
mean为float,std为Tensor的场景。
# PyTorch
import torch
import numpy as np
mean = 3.0
stddev = torch.tensor(np.array([[0.2, 0.3], [0.4, 0.5]]), dtype=torch.float32)
output = torch.normal(mean, stddev)
print(output.shape)
# torch.Size([2, 2])
# MindSpore
import mindspore as ms
import numpy as np
shape = (2, 2)
mean = ms.Tensor(3.0, ms.float32)
stddev = ms.Tensor(np.array([[0.2, 0.3], [0.4, 0.5]]), ms.float32)
output = ms.ops.normal(shape, mean, stddev)
print(output.shape)
# (2, 2)
代码示例 3
PyTorch下
mean为Tensor,std为float的场景。
# PyTorch
import torch
import numpy as np
mean = torch.tensor(np.array([[3, 4], [5, 6]]), dtype=torch.float32)
stddev = 1.0
output = torch.normal(mean, stddev)
print(output.shape)
# torch.Size([2, 2])
# MindSpore
import mindspore as ms
import numpy as np
shape = (2, 2)
mean = ms.Tensor(np.array([[3, 4], [5, 6]]), ms.float32)
stddev = ms.Tensor(1.0, ms.float32)
output = ms.ops.normal(shape, mean, stddev)
print(output.shape)
# (2, 2)
代码示例 4
PyTorch下
mean和std均为float的场景。
# PyTorch
import torch
import numpy as np
mean = 3.0
stddev = 1.0
size = (2, 2)
output = torch.normal(mean, stddev, size)
print(output.shape)
# torch.Size([2, 2])
# MindSpore
import mindspore as ms
import numpy as np
shape = (2, 2)
mean = ms.Tensor(3.0, ms.float32)
stddev = ms.Tensor(1.0, ms.float32)
output = ms.ops.normal(shape, mean, stddev)
print(output.shape)
# (2, 2)