在Tensorflow分类中,当使用“时,标签是如何排序的?”;预测;?
我正在使用MNIST手写数字数据集来训练CNN 在训练模型后,我使用如下预测:在Tensorflow分类中,当使用“时,标签是如何排序的?”;预测;?,tensorflow,Tensorflow,我正在使用MNIST手写数字数据集来训练CNN 在训练模型后,我使用如下预测: predictions = cnn_model.predict(test_images) predictions[0] model.fit(train_images, train_labels, batch_size=BATCH_SIZE, epochs=EPOCHS) predictions = cnn_model.predict(test_images) 我得到的输出是: array([2.1273775e-
predictions = cnn_model.predict(test_images)
predictions[0]
model.fit(train_images, train_labels, batch_size=BATCH_SIZE, epochs=EPOCHS)
predictions = cnn_model.predict(test_images)
我得到的输出是:
array([2.1273775e-06, 2.9292005e-05, 1.2424786e-06, 7.6307842e-05,
7.4305902e-08, 7.2301691e-07, 2.5368356e-08, 9.9952960e-01,
1.2401938e-06, 1.2787555e-06], dtype=float32)
在输出中,有10个概率,0到9之间的数字每个概率一个。但我怎么知道哪个概率指的是哪个数字呢
在该特定情况下,针对数字0到9顺序排列概率。但为什么呢?我没有给它下定义
我试着浏览互联网上其他地方的文档和示例实现,但似乎没有人解决过这种特殊行为
编辑:
在上下文中,我通过以下方式定义了我的训练/测试数据:
mnist = tf.keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = (np.expand_dims(train_images, axis=-1)/255.).astype(np.float32)
train_labels = (train_labels).astype(np.int64)
test_images = (np.expand_dims(test_images, axis=-1)/255.).astype(np.float32)
test_labels = (test_labels).astype(np.int64)
我的模型由几个凝聚层和池层组成,然后是一个扁平层,然后是一个有128个神经元的密集层和一个有10个神经元的输出密集层
之后,我简单地拟合我的模型并使用如下预测:
predictions = cnn_model.predict(test_images)
predictions[0]
model.fit(train_images, train_labels, batch_size=BATCH_SIZE, epochs=EPOCHS)
predictions = cnn_model.predict(test_images)
我不知道我在哪里指示我的代码将第一个神经元输出为数字0,第二个神经元输出为数字1等等
如果我想改变结果数字输出的顺序,我该在哪里做呢?
这真的让我很困惑。这取决于您在培训期间如何准备标签。对于MNIST分类,通常有两种不同的方法:
- 数字0的标签:9
- 数字1:8的标签
- 数字2:7的标签
- 数字3:6的标签
- 数字4:5的标签
- 数字5的标签:4
- 数字6:3的标签
- 数字7的标签:2
- 数字8的标签:1
- 数字9的标签:0
简言之,您必须使用整数索引定义标签,但这取决于您决定并记住您选择的索引引用哪个标签/类别。模型使用数字。您的类/标签应以数字表示(例如,
0、1、…、n
)。预测总是被索引,以显示索引0
处的类0
、索引1处的类1
的概率。现在在MNIST的例子中,您很幸运标签是整数0
到9
。假设你必须将图像分为三类:汽车、自行车、卡车。必须将这些类表示为数值。你可以随意安排。如果您选择:{汽车:0,自行车:1,卡车:2,换句话说,如果您将汽车标记为0,自行车标记为1,卡车标记为2,那么您的预测将显示指数为0的汽车、指数为1的自行车和指数为2的卡车的概率
您还可以选择以下设置:{cars:2、自行车:0、卡车:1,然后您的预测将显示指数2处的汽车、指数0处的自行车和指数1处的卡车的概率,依此类推
关键是,您必须显示从0到n的整数,其中n是num\u classes-1
。你在预测时的概率会被这样索引。你不必告诉模特
希望这一点现在清楚了。我想我理解你的意思,但当我与我的代码进行比较时,我得到的标签是稀疏编码的,而我的网络有一个10个节点的输出层。我还没有定义从稀疏到热的映射。这就是我想弄明白的。顺便说一下,这里是完整代码的链接:是的,tensorflow mnist数据集的标签是稀疏的。标签的范围在0到9之间,并且它们也同样被索引。因此,您的预测概率也会按此进行索引@Zainkhaishagi当你说它们是“这样索引的”时,你是什么意思?在哪里确认或更改此索引?如果我希望第一个输出是数字5,第二个输出是数字8等,我会在哪里进行这样的更改@Bashir Kazimiyou将数字5热编码为:[1,0,0,0,0,0,0,0],数字8热编码为[0,1,0,0,0,0,0,0]等等。在稀疏标签的情况下,您只需创建一个空标签数组,在任何索引中,您都可以将数字5设置为0,将数字8设置为1。等等。也许我遗漏了一些基本的东西,但我还是不明白。我已经编辑了我的问题,添加了如何定义测试/训练标签的代码。它们是稀疏的。之后,我简单地拟合模型并使用predict。我仍然不知道我在哪里指示模型按照输出结果的顺序输出结果。