tf.argmax()与np.argmax()的比较

本文探讨了在TensorFlow(tf.argmax)和NumPy(np.argmax)中使用argmax函数的区别。尽管它们的主要功能相似,即找出最大值的索引,但返回类型和使用场景有所不同。TensorFlow的argmax返回的是一个tensor,需要通过sess.run获取实际值,而NumPy的argmax直接返回array。此外,当input为tensor时,使用tf.argmax更为合适,而array则推荐使用np.argmax。
摘要由CSDN通过智能技术生成

背景

在用tensorflow进行神经网络建模的学习中,发现教程里在不同的位置用到了tf.argmax和np.argmax, 作用基本相同,都是反馈最大值的下标,于是乎甚是疑惑,这两兄弟到底有什么区别?

找度娘

百度了之后,查看了10余篇帖子,发现他们都没有提到这两兄弟的区别的精髓,经过实践后,本新手有了些心得,下面阐述下我的理解

相同点

这方面很多帖子说的很明白了,不赘述。简单说,语法规则基本一致,如下所示:

tf.argmax(
    input,
    axis=None,
    name=None,
    dimension=None,
    output_type=tf.int64
)

input是任意维度的数组或tensor,是必选项,其余参数皆为可选。
一般只需要用到input 、axis两个参数,axis参数取值为0时,函数反馈的是第一维的下标,简单说就是,如果input是个二维数组,函数通过比较每一列的数的大小,最终反馈数值最大的行标;类似的,axis=1时反馈的是第二维的下标;axis=-1时反馈的是最后一维的下标。

不同点

这是本帖子的精髓
1、虽然两兄弟的作用都是一样,但是返回的值的类型不同,tf反馈的是一个tensor,np反馈的是一个array。
有什么区别?像我一样的新手,可能会弄不清汤,简单说,就是tensor必须要sess.run了之后才会输出tensor的值,而array可以直接输出。见如下代码:

In[1]:tf.argmax([[2, 3, 1], [8, 2, 4]], axis=1)
Out[1]: <tf.Tensor 'ArgMax_29:0' shape=(2,) dtype=int64>
In[2]: np.argmax([[2, 3, 1], [8, 2, 4]], axis=1)
Out[2]: array([1, 0], dtype=int64)

因此,如果要print(np.argmax([[2, 3, 1], [8, 2, 4]], axis=1))能直接得到array[1, 0], 而要想通过tf输出array[1, 0], 只能print(sess.run(tf.argmax([[2, 3, 1], [8, 2, 4]], axis=1)),注意中间增加了sess.run

2、当input为tensor的时候,最好用tf,否则np在识别tensor的维度时可能出错;同理,当input为array时,最好用np,更方便。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值