我是机器学习的新手,因此在回答之前请记住这一点。 我遇到了尝试使用带有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]\"}"
在两个数据集中提到的最低得分(来自ImageNet和MIO的子集)。 谨此致谢,感谢您抽出宝贵的时间回答这些问题。
答案 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应用于原始分数,那会比较麻烦,尽管我认为当前的实现在技术上没有什么不正确。