将输出激活函数从 Softmax 更改为 Sigmoid

问题描述 投票:0回答:0

我使用 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

可能出了什么问题?

python deep-learning conv-neural-network activation-function
© www.soinside.com 2019 - 2024. All rights reserved.