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

背景

在用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]: 
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,更方便。

你可能感兴趣的:(学习笔记)