TensorFlow:关于tf.argmax()和tf.equal()的问题
我正在学习TensorFlow,建立一个多层感知器模型。我正在研究一些例子,例如: 然后,我在下面的代码中有一些问题: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
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.