比较与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)