比较与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: 支持四种接口用法。

  • meanstd 均为Tensor,要求 meanstd 的成员数量一致,返回值shape和 mean 一致。

  • mean 为float类型,std 为Tensor,返回值shape和 std 一致。

  • std 为float类型,mean 为Tensor,返回值shape和 mean 一致。

  • meanstd 均为float类型,返回值shape和 size 一致。

MindSpore: meanstd 支持的数据类型是Tensor,返回值的shape由 shape , mean , stddev 三者广播得到。

分类

子类

PyTorch

MindSpore

差异

参数

参数 1

-

shape

MindSpore下用于和 mean , stddev 共同广播得到返回值的shape

参数 2

mean

mean

MindSpore下支持的数据类型是Tensor。PyTorch下支持Tensor、float,对应不同用法

参数 3

std

stddev

MindSpore下支持的数据类型是Tensor。PyTorch下支持Tensor、float,对应不同用法

参数 4

generator

seed

详见通用差异参数表

参数 5

size

-

PyTorch下的返回值的shape,指定的接口用法下使用

参数 6

out

-

详见通用差异参数表

代码示例 1

PyTorch下 meanstd 均为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下 meanstd 均为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)