我使用 Softmax 激活函数构建了一个用于人脸识别的小型 CNN。我有 4 个班级,分别是“John、Emily、Samra 和 Ethan”。我面临的问题是我不希望我的模型向我没有训练过的人做出预测。所以我将我的输出函数更改为 Sigmoid 以获得预测的概率并消除低于 75% 的预测。
以下是我在代码中所做的更改:
改变了
model.add(Dense(4, activation='softmax'))
到
model.add(Dense(1, activation='sigmoid'))
改变了
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
到
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
改变了
train_dataset = train_datagen.flow_from_directory(directory=train_dir,
target_size=IMAGE_SIZE,
class_mode='categorical',
batch_size=BS)
test_dataset = test_datagen.flow_from_directory(directory=test_dir,
target_size=IMAGE_SIZE,
class_mode='categorical',
shuffle=True,
batch_size=BS)
到
train_dataset = train_datagen.flow_from_directory(directory=train_dir,
target_size=IMAGE_SIZE,
class_mode='binary',
batch_size=BS)
test_dataset = test_datagen.flow_from_directory(directory=test_dir,
target_size=IMAGE_SIZE,
class_mode='binary',
shuffle=True,
batch_size=BS)
我面临的问题是当我尝试拟合模型时精度卡在 0.25000,这是输出:
Epoch 1/10
5/5 [==============================] - 2s 214ms/step - loss: -2.9412 - accuracy: 0.2594 - val_loss: -8.6029 - val_accuracy: 0.2500
Epoch 2/10
5/5 [==============================] - 1s 168ms/step - loss: -19.2519 - accuracy: 0.2500 - val_loss: -37.1186 - val_accuracy: 0.2500
Epoch 3/10
5/5 [==============================] - 1s 171ms/step - loss: -61.6039 - accuracy: 0.2500 - val_loss: -113.8668 - val_accuracy: 0.2500
Epoch 4/10
5/5 [==============================] - 1s 168ms/step - loss: -165.9559 - accuracy: 0.2500 - val_loss: -284.4092 - val_accuracy: 0.2500
Epoch 5/10
5/5 [==============================] - 1s 179ms/step - loss: -402.8694 - accuracy: 0.2500 - val_loss: -618.4622 - val_accuracy: 0.2500
Epoch 6/10
5/5 [==============================] - 1s 167ms/step - loss: -776.4962 - accuracy: 0.2500 - val_loss: -1222.9724 - val_accuracy: 0.2500
Epoch 7/10
5/5 [==============================] - 1s 172ms/step - loss: -1539.0515 - accuracy: 0.2500 - val_loss: -2243.4541 - val_accuracy: 0.2500
Epoch 8/10
5/5 [==============================] - 1s 167ms/step - loss: -2776.1990 - accuracy: 0.2500 - val_loss: -3900.9917 - val_accuracy: 0.2500
Epoch 9/10
5/5 [==============================] - 1s 167ms/step - loss: -4639.4336 - accuracy: 0.2500 - val_loss: -6505.3535 - val_accuracy: 0.2500
Epoch 10/10
5/5 [==============================] - 1s 171ms/step - loss: -7515.8906 - accuracy: 0.2500 - val_loss: -10404.7432 - val_accuracy: 0.2500
可能出了什么问题?