簡體   English   中英

Keras:val_loss 增加並且評估損失太高

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM