看不懂CNN模型的预测结果

数据挖掘 深度学习 喀拉斯 张量流 美国有线电视新闻网 计算机视觉
2022-02-27 06:34:15

我使用了以下模型:

Layer (type)                 Output Shape              Param #   
=================================================================
block1_conv1 (Conv2D)        (None, 224, 224, 64)      1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 224, 224, 64)      36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 112, 112, 64)      0         
_________________________________________________________________
block2_conv1 (Conv2D)        (None, 112, 112, 128)     73856     
_________________________________________________________________
block2_conv2 (Conv2D)        (None, 112, 112, 128)     147584    
_________________________________________________________________
block2_pool (MaxPooling2D)   (None, 56, 56, 128)       0         
_________________________________________________________________
block3_conv1 (Conv2D)        (None, 56, 56, 256)       295168    
_________________________________________________________________
block3_conv2 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_conv3 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_pool (MaxPooling2D)   (None, 28, 28, 256)       0         
_________________________________________________________________
block4_conv1 (Conv2D)        (None, 28, 28, 512)       1180160   
_________________________________________________________________
block4_conv2 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_conv3 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_pool (MaxPooling2D)   (None, 14, 14, 512)       0         
_________________________________________________________________
block5_conv1 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv2 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv3 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_pool (MaxPooling2D)   (None, 7, 7, 512)         0         
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0         
_________________________________________________________________
fc1 (Dense)                  (None, 4096)              102764544 
_________________________________________________________________
fc2 (Dense)                  (None, 4096)              16781312  
_________________________________________________________________
dense_2 (Dense)              (None, 3)                 12291     
=================================================================
Total params: 134,272,835
Trainable params: 12,291
Non-trainable params: 134,260,544

我曾经ImageDataGenerator生成批次和fit_generator()训练模型,它给了我很好的结果。在那之后,我曾经predict_generator()得到预测,但我不明白预测的结果。

array([[9.9999332e-01, 4.8690736e-06, 1.7893352e-06],
       [6.9793887e-02, 9.2653686e-01, 3.6693658e-03],
       [9.9999678e-01, 1.7507674e-06, 1.4884581e-06],
       [3.7891464e-04, 3.6775662e-05, 9.9958426e-01]], dtype=float32)

你能解释一下结果是什么意思吗?

另外,我想知道如何在测试数据中显示每个图像及其预测标签?

1个回答

如果不了解更多关于训练数据的信息,就不可能正确解释预测结果。解释结果的一种方法是,该模型为您提供的每张图像生成超过 3 个类别的概率分布。如果您的训练数据由一个热向量组成,其中一个元素是1,另外两个是 ,就会出现这种情况0

模型的输出是应用最终激活函数后的最后一层,因此预测与dense_2最终层的形状相同。None一个维度中的 表示该维度在运行时的大小是动态的,在这种情况下,第一个维度表示批处理元素。因此,输出是一个形状数组,[batch_size, 3]对于输入网络的 4 个示例图像中的每一个,您都有一个 3 元素向量。

在您的评论中,您指出您的最终激活是softmax 函数,这意味着每个 3 元素向量可以表示 3 个可能结果的概率分布(请注意,每个向量总和为 1:根据定义,softmax 标准化其输出)。

如果您尝试预测每个图像的类别(似乎是这种情况),则预测的类别标签整数将是具有最高概率的 3 元素向量的索引。通常,这些整数代表与您的应用程序语义相关的东西。

使用 softmax 输出,您仍然必须在输出上应用决策规则才能实际检索预测的类。例如,如果您可能的类是["dog", "cat", "mouse"]并且您的示例图像输出一个向量[.06, .9, .04],那么您可以选择“预测类”为"cat"或者,您可以将预测的概率分布合并到更精细的概率模型中。