如何解释来自 keras 模型的预测数据

数据挖掘 神经网络 喀拉斯 神经
2022-03-06 18:47:07

我尝试构建一个 keras 模型来对 kaggle 上的叶子分类数据集中的叶子进行分类。在我编译和训练模型之后,我用它来预测测试图像中叶子的名称,但我得到的只是一个整数数组。我怎样才能准确地解释这些数字以获得叶子的名称。

model = Sequential()

model.add(Dense(128, kernel_initializer="uniform", input_dim= 192, activation='relu'))
model.add(Dropout(0.25))
model.add(Dense(99, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
model_history = model.fit(x=X_train,y=Y_train, epochs=500, batch_size= 32, validation_data=(X_val, Y_val), verbose=1)

predictions = model.predict(test_arr, batch_size=32, verbose=1)
computed_predictions = np.argmax(predictions, axis=1)
computed_predictions
array([51, 50,  1, 19, 14,  3,  3, 28, 84,  8, 43, 74, 75, 10, 52, 46, 45,
       73, 13, 71, 61, 68, 57, 77,  1, 70, 28, 15, 35, 70, 53, 74, 47, 50,
        4, 36, 14, 69, 36, 93,  8, 32,  8,  9, 71, 70, 38, 23, 26, 18, 17,
        5, 55, 94, 14, 86, 62, 33, 51, 54, 88, 56, 21, 59, 65, 11, 48,  5,
       13,  4, 54, 57, 29,  7, 31, 98, 92, 84, 25, 10, 61, 43, 85, 24,  1,
        2, 23, 83, 40, 22, 48, 90, 25, 21, 37, 56, 41, 95,  7, 49, 98, 77,
        3, 12, 31, 84, 53, 96, 64, 72, 93, 93, 67, 30,  8, 88, 60, 87,  6,
       57, 34, 34, 60, 17, 75, 27, 51, 73, 39, 23, 38,  2, 41, 61, 24, 97,
       29, 28, 68, 81, 42, 51, 86, 62, 60, 52, 95, 81, 42, 96, 95, 20, 59,
       35, 86,  1, 26, 38, 43, 75, 20, 60, 46, 79, 22, 79, 69, 87, 65, 97,
       75, 21, 29, 21, 11, 10, 58, 94, 27, 22, 15, 45, 89, 54, 43,  5, 23,
       94, 40, 49, 89, 72, 36, 11, 81, 95, 18, 91, 29, 64, 80,  6, 78, 45,
       28,  9, 78, 90, 44, 89, 92, 13,  2, 59,  0, 96, 70, 32, 29, 78, 91,
       55, 44, 38,  5, 60, 49, 58, 93, 67, 92, 88, 90, 79, 25, 37, 18,  0,
       76, 27, 70, 71, 44, 70, 32, 90, 30, 82, 34, 30, 82, 96, 48, 65, 57,
       64, 26, 53, 69, 73,  9,  3, 83, 26, 30, 63, 17, 22, 36, 63, 12, 78,
       36, 14, 27, 25, 67, 38, 20, 54, 76, 69, 67, 97, 80, 44, 92, 69, 23,
       21, 11, 51, 33, 77, 16, 11, 97,  1, 52, 39, 24, 52, 42, 17,  2, 73,
       96, 83, 88,  9, 63, 50, 16, 37, 87, 95,  3, 35, 83, 60, 59, 58,  0,
       79, 62, 38, 93, 68, 69, 46, 19, 46, 94, 18,  0, 33, 89, 40, 62, 48,
       42,  6, 31, 91, 73, 81, 12, 85, 26,  6, 79,  2, 22, 35, 43,  6, 80,
       78, 82,  5, 61, 37, 43, 33, 69, 56, 71, 45, 59, 42, 66, 86, 98, 83,
       90, 64, 82, 11, 79, 56, 56, 49, 48, 20, 74, 15, 33, 49, 89, 44,  7,
       35, 14, 55, 23, 34, 44, 32, 30, 36,  9, 72, 31, 61, 50, 82, 34, 28,
       22, 92, 72, 11, 19,  4, 87, 51, 80, 39, 84, 32, 66, 36, 41, 31, 80,
        4, 26, 68, 96, 20, 36, 34, 39, 56, 73, 76, 84,  7, 67, 37,  8, 95,
       85, 62, 10, 65, 41,  2, 83, 86, 41, 52,  3, 49, 47, 76, 52, 11, 26,
       88, 71, 45, 39, 66, 87, 75, 74,  7, 64, 65, 78, 63, 56, 21, 61, 88,
       62, 91, 59, 12, 74, 15, 85,  8, 66, 57, 83, 82, 72, 58, 96,  7, 67,
       66, 57, 66, 92, 35, 18,  9, 54, 91, 65, 19, 15, 10, 24, 71, 69, 48,
       39, 98, 16, 19, 45, 74,  6, 69, 42, 34, 71, 47, 85, 28, 85, 47, 25,
       27, 58, 68, 84, 97, 63, 97, 76, 81, 87, 77, 14,  0, 28, 41, 14, 12,
       33, 86, 46,  4,  4, 47, 30, 19, 58, 13, 77, 98,  5, 49, 72, 53, 32,
       77, 40, 68, 26, 92, 16, 81, 37, 14, 93, 80, 53, 46, 25, 50, 17, 37,
       93,  0, 20, 54, 10, 91, 40, 81, 53, 18, 27,  1, 12, 54, 73, 15],
      dtype=int64) 
2个回答

简单地对 y_pred 进行反向转换。

您对 Y_train 进行标签编码(即每个数字 1-99 本质上代表一片叶子),您需要做的是从叶子编号和叶子名称(在 LabelEncoder 中)找到映射,您将继续这样的事情

le=LabelEncoder()
bla bal
Y_train=le.fit_transform()
predictions_test = le.inverse_transform(prediction_test)

你有 99 种叶子和 594 条测试记录。输出也是(594,)。这里每个值代表相应的叶种列索引。检查您在 One-HotEncoder/get_dummies 之后收到的物种数据。“computed_predictions”的每个值对应于它们各自的列号。您可以将物种 column_name 导出到列表(99 个标签)并使用列表索引获取标签(即计算预测的相应值)