天蓝色的机器学习工作台-精度高但置信度极低

时间:2018-07-30 23:38:26

标签: python azure azure-machine-learning-studio cntk

我是机器学习的新手,因此在回答之前请记住这一点。 我遇到了尝试使用带有ResNet模型的CNTK在工作台中训练神经网络的挑战。 我遵循了Azure提供的本教程 [1] https://docs.microsoft.com/en-us/azure/machine-learning/desktop-workbench/scenario-image-classification-using-cntk

我的第一个数据集是ImageNet的子集,由900张图像组成,其中包含4种不同类别的汽车,公共汽车,货车和卡车。之后,我使用了下面链接提供的数据集的子集。 [2] http://podoce.dinf.usherbrooke.ca/challenge/dataset/

我使用了9000个数据集图像,这些图像与ImageNet分为四个不同的类别,并开始进行网络训练。

我用于此的分类器是具有以下配置的DNN分类器:

 rf_pretrainedModelFilename = "ResNet_50.model" 
 rf_inputResoluton = 224                
 rf_dropoutRate    = 0.5                 
 rf_mbSize         = 10               
 rf_maxEpochs      = 30                
 rf_maxTrainImages = float('inf')        
 rf_lrPerMb        = [0.01] * 10 + [0.001] * 10 + [0.0001] 
 rf_momentumPerMb  = 0.9                 
 rf_l2RegWeight    = 0.0005              
 rf_boFreezeWeights      = False         
 rf_boBalanceTrainingSet = False          images

训练模型后,我的整体准确度为96.80%,所有类别的准确度均> 92%。一切顺利,但是当我测试其他各种测试图像时,我的最高得分是12.9895。我得到了这样的JSON对象: 该图像被归类为“公共汽车”,可信度为12.9895。

     {\"score\": \"12.9895\", \"Id2Labels\": \"{0: 'Bus', 1: 'Truck', 2: ' 
  Car', 3: 'Van'}\", \"label\": \"Bus\", \"executionTimeMs\": \"128.749\", 
  \"allScores\": \"[ 12.98949814   3.51014233  -6.96435881  -6.89878178]\"}"
  • 值12.9895必须表示图像为公交车的可能性 12.9895%,对吧?为什么不返回0到1之间的值?如果我错了,请指正我,因为我确实对机器学习中用于同一事物的各种术语感到困惑。
  • 为什么那里有负值,我以为激活函数负责负值?
  • 我应该包括更大的数据集还是更好的图像质量来提高得分?
  • 关于如何提高分数的其他建议?

在两个数据集中提到的最低得分(来自ImageNet和MIO的子集)。 谨此致谢,感谢您抽出宝贵的时间回答这些问题。

2 个答案:

答案 0 :(得分:0)

得分也称为预测,是在给定一些新输入数据的情况下,基于经过训练的机器学习模型生成值的过程。创建的值或得分可以表示对未来值的预测,但也可能表示可能的类别或结果。分数的含义取决于您提供的数据类型以及您创建的模型的类型。

不能以1和0返回分数,因为根据您提供的数据,这是总线的12.9895%。因此,您必须编写代码以返回值1和0。

Read Here有关分数的更多信息。

要进行激活,必须使用 ReLU 激活功能。整流线性单位(ReLU)功能,它将负值设置为0,而其他值则保持不变。

Here是实现的一个示例。

对于公交车图像,您可以尝试放置公交车或其他车辆的不同图像,质量越好,您产生的得分就越高,但这取决于逻辑。是什么在您的代码中将其定义为公共汽车还是卡车。

您尝试过this吗?

答案 1 :(得分:0)

我认为allScores数组的含义存在误解。该数组包含网络最终分类层的原始输出,但是它们不代表概率,并且可以采用任何实际值,甚至可以看到负值。要将这些值转换为概率,请将softmax function应用于数组,这将为您提供以下值:

[9.99923588e-01, 7.64073070e-05, 2.15832503e-09, 2.30460548e-09]

Id2Labels字段告诉您该数组中的第0个索引/第一个元素对应于“ bus”类。因此,您的模型预测该图像是具有> 99.99%概率的公共汽车。下一个最可能的标签是“卡车”(数组的第二个元素)。

如果我写deploymain.py在返回结果之前将softmax应用于原始分数,那会比较麻烦,尽管我认为当前的实现在技术上没有什么不正确。