训练过程中验证损失和验证准确率没有变化

我用Tensorflow编写了一个人脸分类程序。在这个项目中,起初我只有两张脸,所以我使用了binary_crossentropy作为损失函数。当我决定添加更多人脸时,我从binary_crossentropy切换到了categorical_crossentropy

我的代码:

以下是我的训练日志:

Epoch 1/201728/1728 [==============================] - 30s 13ms/step - loss: 0.0000e+00 - accuracy: 0.4833 - val_loss: 0.0000e+00 - val_accuracy: 0.4826Epoch 2/201728/1728 [==============================] - 22s 13ms/step - loss: 0.0000e+00 - accuracy: 0.4847 - val_loss: 0.0000e+00 - val_accuracy: 0.4826Epoch 3/201728/1728 [==============================] - 22s 13ms/step - loss: 0.0000e+00 - accuracy: 0.4827 - val_loss: 0.0000e+00 - val_accuracy: 0.4826

如你所见,我的val_lossval_accuracy没有变化。我的代码有什么问题?我该如何修复?


回答:

如果提供了更多关于数据的信息,回答会更准确。

首先,你使用了分类交叉熵作为损失函数,同时最后层的激活函数使用了Sigmoid,这两者是矛盾的(Sigmoid意味着你在进行两类分类,而分类交叉熵是用于多类分类的情况)。要么将损失函数改为二元交叉熵,如果你想使用Sigmoid(这意味着你有两类),要么将Sigmoid改为Softmax函数,如果你想对多于两类进行分类。

此外,你需要在最后一个CNN层之后和第一个全连接层之前使用Flatten(它将特征图(一个矩阵)转换为一个向量,这是全连接层正确的输入形状)。

最后,完成上述修改后,你可以尝试调整你的超参数(学习率、批量大小等),看看是否能提高一些准确率。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注