当我学习Tensorflow时,我对输出层张量的尺寸感到困惑。
我正在学习如何在Tensorflow中构建一个多层接受器模型。我的代码是this one。
简而言之,它基本上如下框架所示:
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}))
我了解argmax
和equal
方法的概念。但是为什么tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
轴参数为1?或者说,为什么pred
超过1维?对我来说,pred
应该与1D数组相似。例如。 [0,1,1,1,1]表示除第一次预测外,其他均为正确。为什么我们需要在等方法之前使用argmax?
谢谢!
答案 0 :(得分:0)
当MLP模型用于分类时,通常,最后一层是标准线性层,它将最后一个隐藏层投影到输出层。最后一个单元的数量与您的类数相同(这个输出单元通常称为logits)。
然后,此输出层通常提供给softmax函数,该函数将最大值和其他所有值向下推。换句话说,它执行“软”max(其中max表示无处不在的零数组,最大元素中有一个)。
在代码中,多层感知器函数实际返回logits节点。 Logits可以被视为每个输出类的“置信度”。最后,你需要argmax选择学位最高的班级,你更有信心的班级。
pred
函数返回的multilayer_perceptron
张量是[batch_size x num_classes]。对于输入中提供的每个示例,您具有num_classes置信度,并且您需要argmax来提取正确类的索引(最大置信度)。
P.S。请记住,这是一个多类分类问题,其中网络的每个输出节点都链接到关于单个类的预测。每个输出节点i
的任务是确定输入是否属于i
类。