我有一个非常基本的卷积神经网络,内置在 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)
我怎么知道哪个概率数组对应哪个图像?