CNN 模型 Keras 中分类预测结果的巨大差异

Huge disparity in classification prediction results in CNN model Keras

我用 Keras 训练了一个 CNN 模型,df921 rows x 10165 columns 每行都是一个具有 10160 特征的样本。然后我使用预训练模型进行预测。

我确保训练数据均衡,大约 50% 的样本带有标签 0,其余 50% 带有标签 1。模型精度看起来不错,但在预测过程中出现问题。

因此输入数据如下所示:

X = df.iloc[:,0:10160]  
X = X.to_numpy()                      
X = X.reshape([X.shape[0], X.shape[1],1]) 
X_train_1 = X[:,0:10080,:]
X_train_2 = X[:,10080:10160,:].reshape(921,80)      
Y = df.iloc[:,10163:10165]
Y = Y.to_numpy()

我用代码预测了带有预测标签“1”(对于 label_1)的样本数量:

prediction = pd.DataFrame(model.predict([X_train_1,X_train_2])) 
prediction['label_1'] = ['0' if x < 0.5 else '1' for x in prediction['prob']]

prediction[prediction['label_1'] == '1'].shape[0]/921

第二行代码计算所有样本中label_1 ==1样本的比例。问题是,鉴于输入数据的 10 数量平衡,我预计分数约为 50% 左右,但计算出的分数在范围 0.08 之间~ 0.98(如果不是更极端的话)有巨大的差异。可能出了什么问题?

改用model.predict_classes()。否则你得到的概率。

prediction = pd.DataFrame(model.predict_classes([X_train_1,X_train_2])) 
prediction[prediction['label_1'] == '1'].shape[0]/921

如果您使用函数 API,请使用 np.argmax():

np.argmax(model.predict([X_train_1,X_train_2]), axis=1)

然后您需要预测您需要的值,例如 0 和 1 而不是概率。