python - Keras:val_loss 正在增加,评估损失太高

标签 python tensorflow machine-learning keras neural-network

我是 Keras 新手,我正在使用它构建一个普通的神经网络来对数字 MNIST 数据集进行分类。
事先我已经将数据分为 3 部分: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 samples
Epoch 1/20
55000/55000 [==============================] - 5s 91us/sample - loss: 0.2822 - accuracy: 0.9199 - val_loss: 0.1471 - val_accuracy: 0.9588
Epoch 2/20
55000/55000 [==============================] - 5s 82us/sample - loss: 0.1274 - accuracy: 0.9626 - val_loss: 0.1011 - val_accuracy: 0.9710
Epoch 3/20
55000/55000 [==============================] - 5s 83us/sample - loss: 0.0899 - accuracy: 0.9734 - val_loss: 0.0939 - val_accuracy: 0.9742
Epoch 4/20
55000/55000 [==============================] - 5s 84us/sample - loss: 0.0674 - accuracy: 0.9796 - val_loss: 0.0760 - val_accuracy: 0.9770
Epoch 5/20
55000/55000 [==============================] - 5s 94us/sample - loss: 0.0541 - accuracy: 0.9836 - val_loss: 0.0842 - val_accuracy: 0.9742

Epoch 15/20
55000/55000 [==============================] - 4s 82us/sample - loss: 0.0103 - accuracy: 0.9967 - val_loss: 0.0963 - val_accuracy: 0.9788
Epoch 16/20
55000/55000 [==============================] - 5s 84us/sample - loss: 0.0092 - accuracy: 0.9973 - val_loss: 0.0956 - val_accuracy: 0.9774
Epoch 17/20
55000/55000 [==============================] - 5s 82us/sample - loss: 0.0081 - accuracy: 0.9977 - val_loss: 0.0977 - val_accuracy: 0.9770
Epoch 18/20
55000/55000 [==============================] - 5s 85us/sample - loss: 0.0076 - accuracy: 0.9977 - val_loss: 0.1057 - val_accuracy: 0.9760
Epoch 19/20
55000/55000 [==============================] - 5s 83us/sample - loss: 0.0063 - accuracy: 0.9980 - val_loss: 0.1108 - val_accuracy: 0.9774
Epoch 20/20
55000/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 类可能会帮助您

另一件需要注意的事情可能是你的超参数。为什么在第一个密集层中使用 100 个节点?如果您想从密集层开始,也许像 784 (28*28) 这样的东西似乎更有趣。我建议使用Convolutional-Dropout-Dense的某种组合。那么你的dense层可能不需要那么多节点......

关于python - Keras:val_loss 正在增加,评估损失太高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60163782/

相关文章:

python - AWS/EB - 受到内部虚拟连接的影响

python - 使用 Estimator 的 Tensorflow Embeddings 最佳实践

machine-learning - 如何构建Tensorflow模型代码?

python - 经过训练的机器学习模型太大

python - 如何使用自定义 SVM 内核?

python - 使用 Pandas 在选项卡中的单个 csv 表中添加多个 csv

python - TensorFlow 整个数据集存储在图中

c++11 - 使用 CXX_FLAGS 构建 Eigen3

python - 如何制作具有不同输入形状的批处理的神经网络

python - 使用 Cartopy 时,几何图形必须是点或线串错误