Keras: val_loss 增加且评估损失过高

我是 Keras 的新手,正在使用它构建一个普通的神经网络来对 MNIST 数据集中的数字进行分类。
在此之前,我已经将数据分为三部分:55000 用于训练,5000 用于评估,10000 用于测试,并且我已经将像素密度缩小(通过除以 255.0)。
我的模型看起来是这样的:

model = keras.models.Sequential()model.add(keras.layers.Flatten(input_shape=[28,28]))model.add(keras.layers.Dense(100, activation='relu'))model.add(keras.layers.Dense(10, activation='softmax'))

这是编译代码:

model.compile(loss='sparse_categorical_crossentropy',              optimizer = 'Adam',              metrics=['accuracy'])

我训练模型如下:

his = model.fit(xTrain, yTrain, epochs = 20, validation_data=(xValid, yValid))

起初,val_loss 在下降,然后开始增加,尽管准确率在提升。

Train on 55000 samples, validate on 5000 samplesEpoch 1/2055000/55000 [==============================] - 5s 91us/sample - loss: 0.2822 - accuracy: 0.9199 - val_loss: 0.1471 - val_accuracy: 0.9588Epoch 2/2055000/55000 [==============================] - 5s 82us/sample - loss: 0.1274 - accuracy: 0.9626 - val_loss: 0.1011 - val_accuracy: 0.9710Epoch 3/2055000/55000 [==============================] - 5s 83us/sample - loss: 0.0899 - accuracy: 0.9734 - val_loss: 0.0939 - val_accuracy: 0.9742Epoch 4/2055000/55000 [==============================] - 5s 84us/sample - loss: 0.0674 - accuracy: 0.9796 - val_loss: 0.0760 - val_accuracy: 0.9770Epoch 5/2055000/55000 [==============================] - 5s 94us/sample - loss: 0.0541 - accuracy: 0.9836 - val_loss: 0.0842 - val_accuracy: 0.9742Epoch 15/2055000/55000 [==============================] - 4s 82us/sample - loss: 0.0103 - accuracy: 0.9967 - val_loss: 0.0963 - val_accuracy: 0.9788Epoch 16/2055000/55000 [==============================] - 5s 84us/sample - loss: 0.0092 - accuracy: 0.9973 - val_loss: 0.0956 - val_accuracy: 0.9774Epoch 17/2055000/55000 [==============================] - 5s 82us/sample - loss: 0.0081 - accuracy: 0.9977 - val_loss: 0.0977 - val_accuracy: 0.9770Epoch 18/2055000/55000 [==============================] - 5s 85us/sample - loss: 0.0076 - accuracy: 0.9977 - val_loss: 0.1057 - val_accuracy: 0.9760Epoch 19/2055000/55000 [==============================] - 5s 83us/sample - loss: 0.0063 - accuracy: 0.9980 - val_loss: 0.1108 - val_accuracy: 0.9774Epoch 20/2055000/55000 [==============================] - 5s 85us/sample - loss: 0.0066 - accuracy: 0.9980 - val_loss: 0.1056 - val_accuracy: 0.9768

当我评估时,损失值过高:

model.evaluate(xTest, yTest)

结果如下:

10000/10000 [==============================] - 0s 41us/sample - loss: 25.7150 - accuracy: 0.9740[25.714989705941953, 0.974]

这是正常的吗,还是过拟合的迹象?我应该做些什么来改进它?提前感谢。


回答:

通常情况下,这是不正常的。你希望损失率尽可能小。你的结果是典型的过拟合现象。你的网络“知道”它的训练数据,但无法分析新的图像。你可能需要添加一些层。也许是卷积层、Dropout层……另一个想法是增强你的训练图像。Keras 提供的 ImageDataGenerator 类可能在这里帮到你。

你还可以看看你的超参数。为什么在第一个 dense 层使用 100 个节点?也许像 784(28*28)这样的数字更有趣,如果你想从 dense 层开始。我建议一些 ConvolutionalDropoutDense 的组合。这样你的 dense 层可能不需要那么多节点…

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中创建了一个多类分类项目。该项目可以对…

发表回复

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