当我学习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数组类似。E、 g.[0,1,1,1,1]表示除第一个预测外,其他预测都是正确的。为什么我们需要一个argmax在相等的方法之前?在
谢谢你!在
当使用MLP模型进行分类时,通常最后一层是一个标准的线性层,它将最后一个隐藏层投影到输出层中。最后一个单元的数量与类的数量相同(这个输出单元通常称为logit)。在
然后,这个输出层通常被提供给一个softmax函数,该函数将最大值向上推,其他所有的都向下推。换言之,它执行一个“软”max(其中max是指到处都是零的数组,maximum元素中是一个1)。在
在代码中,多层感知器函数实际上返回logits节点。logit可以看作是每个输出类的“置信度”。最终,您将需要argmax来选择具有最高学位的类,您对该类更有信心。在
multilayer_perceptron
函数返回的pred
张量是[batch\u size x num_classes]。对于input中提供的每个示例,都有num_classes的置信度,并且需要一个argmax来提取正确类的索引(最大置信度)。在请注意,这是一个多类分类问题,网络的每个输出节点都与单个类的预测有关。每个输出节点
i
都有一项任务,即决定输入是否属于i
类。在相关问题 更多 >
编程相关推荐