如何将类概率数组与keras中的相应图像相关联?

数据挖掘 Python 预测建模 喀拉斯 张量流
2022-03-08 03:24:13

我有一个非常基本的卷积神经网络,内置在 Keras 中,带有 TensorFlow 后端。该模型基于此Kaggle 内核完整模型输入训练数据是 256x256 图像,在 csv 文件中具有相应的类标签集。例如,这里是 csv 文件中的类标签:

image_name  |  tags
----------------------------------------
train_0     |  class1 class2 class3
train_1     |  class2
train_2     |  class3
and so on ...

以下代码显示了我如何构建、训练和预测结果。

# Build model
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=(32, 32, 3))) # Originally (32, 32, 3)

model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(3, activation='sigmoid')) # Originally 17

model.compile(loss='binary_crossentropy', # We NEED binary here, since categorical_crossentropy l1 norms the output before calculating loss.
              optimizer='adam',
              metrics=['accuracy'])

# Train the model              
model.fit(x_train, y_train,
          batch_size=128,
          epochs=4,
          verbose=1,
          validation_data=(x_valid, y_valid))

# Predict
p_valid = model.predict(x_valid, batch_size=128)

你可以看到预测结果是一个类概率数组:

p_valid
Out[29]: 
array([[2.4571007e-01, 1.4929530e-02, 9.3575776e-01],
       [2.6206359e-01, 1.2429485e-02, 9.5172155e-01],
       [3.3679003e-01, 2.8344743e-02, 8.5209453e-01],
       ...,
       [8.2605546e-03, 2.0513092e-07, 9.9999821e-01],
       [8.2605546e-03, 2.0513092e-07, 9.9999821e-01],
       [8.2605667e-03, 2.0513131e-07, 9.9999821e-01]], dtype=float32)

我怎么知道哪个概率数组对应哪个图像?

1个回答

KerasModel.predict()方法不会对数据进行洗牌,因此 in 中p_valid的每一行对应于x_valid. 例如,p_valid[2]保存图像的概率x_valid[2]

顺便说一句,请注意,每一行中的值不一定总和为1,因为它们对应于类i存在的概率,因此不是唯一的。