比较与tf.nn.max_pool2d的功能差异
tf.nn.max_pool2d
tf.nn.max_pool2d(
input,
ksize,
strides,
padding,
data_format='NHWC',
name=None
) -> Tensor
更多内容详见tf.nn.max_pool2d。
mindspore.nn.MaxPool2d
class mindspore.nn.MaxPool2d(
kernel_size=1,
stride=1,
pad_mode='valid',
data_format='NCHW'
)(x) -> Tensor
更多内容详见mindspore.nn.MaxPool2d。
差异对比
TensorFlow:对输入的多维数据进行二维的最大池化运算。
MindSpore:MindSpore此API实现功能与TensorFlow基本一致。
分类 |
子类 |
TensorFlow |
MindSpore |
差异 |
---|---|---|---|---|
参数 |
参数1 |
input |
x |
功能一致,参数名不同 |
参数2 |
ksize |
kernel_size |
功能一致,参数名不同,TensorFlow无默认值 |
|
参数3 |
strides |
stride |
功能一致,参数名不同,TensorFlow无默认值 |
|
参数4 |
padding |
pad_mode |
功能一致,参数名不同,TensorFlow无默认值。更多内容详见Conv 和 Pooling |
|
参数5 |
data_format |
data_format |
- |
|
参数6 |
name |
- |
不涉及 |
代码示例1
在TensorFlow中,当padding=”SAME”时,对应MindSpore中pad_mode=”same”,data_format=”NHWC”,再设置ksize=3,strides=2,对输入数据进行二维的最大池化运算,两API实现相同的功能。
# TensorFlow
import tensorflow as tf
x = tf.constant([[[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]]], dtype=tf.float32)
output = tf.nn.max_pool2d(x, ksize=3, strides=2, padding="SAME")
print(output.shape)
# (1, 1, 1, 10)
# MindSpore
import mindspore
import numpy as np
from mindspore import context
from mindspore import Tensor
device = context.get_context("device_target")
x = Tensor(np.array([[[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]]]).astype(np.float32))
if device == "Ascend" or device == "CPU":
max_pool = mindspore.nn.MaxPool2d(kernel_size=3, stride=2, pad_mode='same')
x = mindspore.ops.transpose(x, (0, 3, 2, 1))
output = max_pool(mindspore.Tensor(x))
output = mindspore.ops.transpose(output, (0, 3, 2, 1))
print(output.shape)
# (1, 1, 1, 10)
else:
max_pool = mindspore.nn.MaxPool2d(kernel_size=3, stride=2, pad_mode='same', data_format='NHWC')
output = max_pool(x)
print(output.shape)
# (1, 1, 1, 10)