TensorFlow:关于tf.argmax()和tf.equal()的问题

TensorFlow:关于tf.argmax()和tf.equal()的问题,tensorflow,neural-network,deep-learning,Tensorflow,Neural Network,Deep Learning,我正在学习TensorFlow,建立一个多层感知器模型。我正在研究一些例子,例如: 然后,我在下面的代码中有一些问题: def multilayer_perceptron(x, weights, biases): : : pred = multilayer_perceptron(x, weights, biases) : : with tf.Session() as sess: sess.run(init) : correct

我正在学习TensorFlow,建立一个多层感知器模型。我正在研究一些例子,例如:

然后,我在下面的代码中有一些问题:

def multilayer_perceptron(x, weights, biases):
    :
    :

pred = multilayer_perceptron(x, weights, biases)
    :
    :

with tf.Session() as sess:
    sess.run(init)
         :
    correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))

    accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
    print ("Accuracy:", accuracy.eval({x: X_test, y: y_test_onehot}))
我想知道
tf.argmax(prod,1)
tf.argmax(y,1)
的确切含义和返回(类型和值)是什么?正确的预测是一个变量而不是实际值吗

最后,我们如何从tf会话中获得
y\u test\u prediction
数组(当输入数据为
X\u test
时的预测结果)?非常感谢

tf.argmax(输入,轴=无,名称=无,维度=无)

返回在张量轴上具有最大值的索引

对于特定的情况,它接收
pred
作为其
输入的参数
1
作为
。轴描述了输入张量的哪个轴要减小。对于向量,使用轴=0

示例:给定列表
[2.11,1.0021,3.99,4.32]
argmax将返回最大值的索引
3


正确的\u预测是一个张量,稍后将进行评估。它不是一个常规的python变量。它包含了以后计算该值所需的信息。 对于这种特殊情况,它将是另一个张量
accurity=tf.reduce\u mean(tf.cast(correct\u prediction,“float”)
的一部分,并将通过
accurity.eval({x:x\u test,y:y\u test\u onehot})上的
eval
进行评估


y\u-test\u-prediction应该是您的
correct\u-prediction
张量

tf.argmax(input, axis=None, name=None, dimension=None)
返回在张量轴上具有最大值的索引

输入是一个张量,轴描述了要减小的输入张量轴。对于向量,使用轴=0

对于您的特定情况,让我们使用两个数组并演示这一点

pred = np.array([[31, 23,  4, 24, 27, 34],
                [18,  3, 25,  0,  6, 35],
                [28, 14, 33, 22, 20,  8],
                [13, 30, 21, 19,  7,  9],
                [16,  1, 26, 32,  2, 29],
                [17, 12,  5, 11, 10, 15]])

y = np.array([[31, 23,  4, 24, 27, 34],
                [18,  3, 25,  0,  6, 35],
                [28, 14, 33, 22, 20,  8],
                [13, 30, 21, 19,  7,  9],
                [16,  1, 26, 32,  2, 29],
                [17, 12,  5, 11, 10, 15]])
计算
tf.argmax(pred,1)
给出一个张量,其计算将给出
数组([5,5,2,1,3,0])

计算
tf.argmax(y,1)
给出一个张量,其计算将给出
数组([5,5,2,1,3,0])

根据我们的示例,
tf.equal(tf.argmax(pred,1),tf.argmax(y,1))
返回一个张量,其计算结果将给出数组(1,1,1,1,1)

正确的_预测是一个张量,其计算结果将给出0和1的一维数组

通过执行
pred=tf.argmax(logits,1)

可以通过以下链接访问tf.argmax和tf.equal的文档

tf.argmax()


tf.equal()

阅读文档:

返回在张量轴上具有最大值的索引

返回(x==y)元素的真值

将张量强制转换为新类型

计算元素在张量维度上的平均值


现在你可以很容易地解释它的作用了。您的
y
是一个热编码的,因此它有一个1,其他的都是零。您的
pred
表示类的概率。因此,argmax找到了最佳预测和正确值的位置。然后检查它们是否相同

因此,现在您的
correct_prediction
是一个真/假值向量,其大小等于您要预测的实例数。将其转换为浮点数并取平均值



实际上,这一部分在评估模型部分中得到了很好的解释
logits
是否是该代码中的
pred
?我的意思是logits是一个模型的结果,例如
out=tf.matmul(完全连接层,\u权重['out'])+\u偏差['out']
(我有一个CNN模型)?所以我不明白如何获得
pred=tf.argmax(logits,1)
,因为在这种情况下,logits是“样本/图片”所属的概率(对于每个类)。所以为了得到pred。对于“示例/图片”,您获得了最大概率,因此使用tf.argmaxwhy返回
3
?其中最大值为4.32?@Ayodhyankitpul 4.32的指数,即最大值,为3。它从0(2.11)开始,得到了,它返回的是索引而不是值。在实际模型中,这个过程,我的意思是tf.equal(tf.argmax(pred,1),tf.argmax(y,1))的过程是针对每个样本、每个批次或每个历元完成的?最终的价值是多少?
tf.equal(x, y, name=None) takes two tensors(x and y) as inputs and returns the truth value of (x == y) element-wise.