[英]Keras: val_loss is increasing and evaluate loss is too high
我是 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
-Class 可能會在這里幫助你
另一件要考慮的事情可能是您的超參數。 為什么在第一個dense
層使用 100 個節點? 如果你想從一個dense
層開始,也許像 784 (28*28) 這樣的東西看起來更有趣。 我會建議一些Convolutional
- Dropout
- Dense
組合。 那么你的dense
層可能不需要那么多節點......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.