比较与torch.nn.AdaptiveAvgPool2d的功能差异
torch.nn.AdaptiveAvgPool2d
torch.nn.AdaptiveAvgPool2d(output_size)(input) -> Tensor
更多内容详见torch.nn.AdaptiveAvgPool2d。
mindspore.nn.AdaptiveAvgPool2d
class mindspore.nn.AdaptiveAvgPool2d(output_size)(x) -> Tensor
差异对比
PyTorch:对输入三维或四维的Tensor,使用二维的自适应平均池化操作,指定输出的尺寸为H x W,输出的特征数目等于输入的特征数目。output_size可以是int类型的H和W组成的元组(H, W),或者代表相同H和W的一个int值,或者None则表示输出大小将与输入相同。输入和输出数据格式可以是”NCHW”和”CHW”,N表示批处理大小、C是通道数、H是特征高度和W是特征宽度。
MindSpore:MindSpore此API实现功能与PyTorch一致,参数名也相同。
分类 |
子类 |
PyTorch |
MindSpore |
差异 |
---|---|---|---|---|
输入 |
单输入 |
input |
x |
都是输入三维或四维的Tensor |
参数 |
参数1 |
output_size |
output_size |
- |
代码示例1
两API实现功能一致,用法相同。输入为三维Tensor,数据尺寸为(C, H, W),output_size=(None, new_W),则PyTorch和MindSpore的AdaptiveAvgPool2D输出一致,数据尺寸为(C, H, new_W)。
# case 1: output_size = (None, 2)
# PyTorch
import torch
# torch_input.shape = (1, 3, 3)
torch_input = torch.tensor([[[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
[7.0, 8.0, 9.0]]], dtype=torch.float32)
output_size = (None, 2)
torch_adaptive_avg_pool_2d = torch.nn.AdaptiveAvgPool2d(output_size)
# torch_output = (1, 3, 2)
torch_output = torch_adaptive_avg_pool_2d(torch_input)
torch_out_np = torch_output.numpy()
print(torch_out_np)
# [[[1.5 2.5]
# [4.5 5.5]
# [7.5 8.5]]]
# MindSpore
import numpy as np
import mindspore
from mindspore import Tensor
# ms_input.shape = (1, 3, 3)
ms_input = Tensor(np.array([[[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
[7.0, 8.0, 9.0]]]), mindspore.float32)
output_size = (None, 2)
ms_adaptive_avg_pool_2d = mindspore.nn.AdaptiveAvgPool2d(output_size)
# ms_output = (1, 3, 2)
ms_output = ms_adaptive_avg_pool_2d(ms_input)
ms_out_np = ms_output.asnumpy()
print(ms_out_np)
# [[[1.5 2.5]
# [4.5 5.5]
# [7.5 8.5]]]