比较与tf.math.argmax的功能差异

tf.math.argmax

tf.math.argmax(
    input,
    axis=None,
    output_type=tf.dtypes.int64,
    name=None,
) -> Tensor

更多内容详见tf.math.argmax

mindspore.ops.argmax

mindspore.ops.argmax(x, axis=None, keepdims=False) -> Tensor

更多内容详见mindspore.ops.argmax

差异对比

TensorFlow:返回Tensor沿着给定的维度上最大值的索引,返回值类型默认为tf.int64,默认是返回axis为0时最大值的索引。

MindSpore:MindSpore此API实现功能与TensorFlow基本一致,返回值类型默认为ms.int32,默认是返回axis为-1时最大值的索引。

分类

子类

TensorFlow

MindSpore

差异

输入

单输入

input

x

都是输入Tensor,二者均不支持零维张量,TensorFlow支持Tensor类型和Numpy.ndarray类型的输入,MindSpore只支持Tensor类型的输入

参数

参数1

axis

axis

功能一致,参数名相同,默认值不同

参数2

output_type

-

指定输出类型,MindSpore无此参数

参数3

name

-

不涉及

参数4

-

keepdims

TensorFlow无此参数,MindSpore的参数keepdims为True时将进行聚合的维度保留,并设定为1

代码示例1

TensorFlow的argmax算子在不显式给出axis参数时,计算结果是axis按默认值为0时最大值的索引,而MindSpore默认是返回axis为-1时最大值的索引。因此,为了得到相同的计算结果,在计算前,将mindspore.ops.argmax算子参数axis赋值为0,同时为保证二者输出类型是一致的,需使用mindspore.ops.Cast算子将MindSpore的计算结果转换成mindspore.int64。

# TensorFlow
import tensorflow as tf
import numpy as np

x = np.arange(2*3*4).reshape(2, 3, 4).astype(np.float32)
tf_argmax = tf.math.argmax
tf_output = tf.math.argmax(tf.constant(x))
tf_out_np = tf_output.numpy()
print(tf_out_np)
# [[1 1 1 1]
#  [1 1 1 1]
#  [1 1 1 1]]

# MindSpore
import numpy as np
import mindspore
from mindspore import Tensor

x = np.arange(2*3*4).reshape(2,3,4).astype(np.float32)
axis = 0
ms_argmax = mindspore.ops.argmax
ms_output = ms_argmax(Tensor(x), axis)
ms_cast = mindspore.ops.Cast()
ms_output = ms_cast(ms_output, mindspore.int64)
ms_out_np = ms_output.asnumpy()
print(ms_out_np)
# [[1 1 1 1]
#  [1 1 1 1]
#  [1 1 1 1]]

代码示例2

TensorFlow和MindSpore参数传入方式不会影响功能。

# TensorFlow
import tensorflow as tf
import numpy as np

x = np.arange(2*3*4).reshape(2, 3, 4).astype(np.float32)
tf_argmax = tf.math.argmax
axis = 2
tf_output = tf.math.argmax(tf.constant(x), axis)
tf_out_np = tf_output.numpy()
print(tf_out_np)
# [[3 3 3]
#  [3 3 3]]

# MindSpore
import numpy as np
import mindspore
from mindspore import Tensor

x = np.arange(2*3*4).reshape(2,3,4).astype(np.float32)
axis = 2
ms_argmax = mindspore.ops.argmax
ms_output = ms_argmax(Tensor(x), axis)
ms_cast = mindspore.ops.Cast()
ms_output = ms_cast(ms_output, mindspore.int64)
ms_out_np = ms_output.asnumpy()
print(ms_out_np)
# [[3 3 3]
#  [3 3 3]]

代码示例3

TensorFlow参数output_type用于指定输出数据类型,默认是tf.int64。而MindSpore的参数output_type默认值是mindspore.int32,为保证二者输出类型是一致的,需使用mindspore.ops.Cast算子将MindSpore的计算结果转换成mindspore.int64。TensorFlow参数name用于定义执行操作的名称,不影响结果,MindSpore无此参数。

# TensorFlow
import tensorflow as tf
import numpy as np

x = np.arange(2*3*4).reshape(2, 3, 4).astype(np.float32)
tf_argmax = tf.math.argmax
axis = 1
tf_output = tf.math.argmax(tf.constant(x), axis, name="tf_output")
tf_out_np = tf_output.numpy()
print(tf_out_np)
# [[2 2 2 2]
#  [2 2 2 2]]

# MindSpore
import numpy as np
import mindspore
from mindspore import Tensor

x = np.arange(2*3*4).reshape(2,3,4).astype(np.float32)
axis = 1
ms_argmax = mindspore.ops.argmax
ms_output = ms_argmax(Tensor(x), axis)
ms_cast = mindspore.ops.Cast()
ms_output = ms_cast(ms_output, mindspore.int64)
ms_out_np = ms_output.asnumpy()
print(ms_out_np)
# [[2 2 2 2]
#  [2 2 2 2]]