【问题标题】:Ensemble with voting in deep learning models在深度学习模型中进行投票
【发布时间】:2023-03-19 14:43:02
【问题描述】:

我正在研究一个带有 RGB-D 图像的多模态深度学习分类器。我为每种情况开发了两个单独的模型。第一个是带有 CNN 的 LSTM,用于形状为 (3046,200,200,3) 的 RGB 图像,第二个是用于形状为 (3046,200,200) 的深度图像的 LSTM。我正在尝试弄清楚如何进行 Ensemble-with-voting。

我已经完成了以下代码来找到投票最多的标签,但似乎效果不佳。还有其他方法可以对模型进行后期融合吗?

labels = []
loaded_model = keras.models.load_model('Saved/LSTM_RGB/LSTMRGB.h5')
predictsRGB = np.argmax(loaded_model.predict(x_testRGB), axis=1)
labels.append(predictsRGB)

loaded_model = keras.models.load_model('Saved/LSTM_DEPTH/LSTMDEPTH.h5')
predictsDepth = np.argmax(loaded_model.predict(x_testDepth), axis=1)
labels.append(predictsDepth)

print(labels)
# Ensemble with voting
labels = np.array(labels)
labels = np.transpose(labels, (1, 0))
print(labels,labels.shape)
labels = scipy.stats.mode(labels)[0]
labels = np.squeeze(labels)
print(labels)
print(labels.shape)

【问题讨论】:

  • 整体投票应该有奇数个分类器来打破平局。这里只有两个分类器。
  • @rayryeng 我还能做些什么,才能获得后期融合结果?
  • 我不明白你在问什么

标签: python tensorflow machine-learning keras deep-learning


【解决方案1】:

你有两个分类器,在那种情况下直接投票没有意义,因为如何解决关系?

由于您正在对模型的预测进行 np.argmax,因此我相信模型会输出概率作为预测。如果不能引入第三个模型,可以将这些概率平均,然后取 argmax。

例如:模型 1 表示概率为 0.9 的类别 1 和概率为 0.1 的类别 0 而模型 2 表示 1 类的概率为 0.3,0 类的概率为 0.7。

平均概率为: Class1:0.6 Class0:0.4,你会选择class1。在某种程度上,这是有道理的,因为模型 1 比模型 2 更确定其预测

【讨论】:

  • 您能建议一种实现方式(有现成的功能吗?),还是我应该手动获取每个模型类的预测? – jvario 7 分钟前
  • 我认为不存在内置函数。 model.predict 返回什么?没有任何 argmax。它不是形状(类数)吗?如果是,您可以添加 predictsRGB 和 predictsDepth 并除以二
  • 你的意思是这样的? (depth_model.predict(x_testDepth)+rgb_model.predict(x_testRGB))/2 ?
  • 是的,如果 .predict 的输出是我所说的每个类的概率。它们也可能是原始分数,在这种情况下,在添加之前,您应该分别对它们中的每一个进行标准化。如果 .predict 返回 [8,4] 您应该将其转换为 [0.66, 0.33] 然后添加。
  • 它返回一个形状为 (3000,10) 且带有小数概率的数组(我猜),如果我在已求和的预测数组上使用 argmax (AvgModelTrans=np.eye(10, dtype=int)[np.argmax(AvgModel, axis=1)] ) 运行分类报告似乎可行。
猜你喜欢
  • 1970-01-01
  • 2016-11-24
  • 2021-05-05
  • 2018-10-27
  • 1970-01-01
  • 2018-02-03
  • 2022-06-14
  • 2017-10-22
  • 2021-04-08
相关资源
最近更新 更多