Der Datensatz, den ich verwendet habe, enthält 33k Bilder. Das Training enthält 27k und das Validierungsset enthält 6k Bilder.
ich verwendet, um die folgenden CNN-Code für das Modell:Mögliche Gründe für die Überanpassung des Datensatzes
model = Sequential()
model.add(Convolution2D(32, 3, 3, activation='relu', border_mode="same", input_shape=(row, col, ch)))
model.add(Convolution2D(32, 3, 3, activation='relu', border_mode="same"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Convolution2D(64, 3, 3, activation='relu', border_mode="same"))
model.add(Convolution2D(128, 3, 3, activation='relu', border_mode="same"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Activation('relu'))
model.add(Dense(1024))
model.add(Dropout(0.5))
model.add(Activation('relu'))
model.add(Dense(1))
adam = Adam(lr=0.0001)
model.compile(optimizer=adam, loss="mse", metrics=["mae"])
Der Ausgang I erhalten eine decreasing training loss
hat aber increasing validation loss
overfitting
hindeutet. Aber ich habe dropouts
enthalten, die in .Following geholfen haben sollte, ist die Schnippen ausgegeben, wenn für 10 Epochen trainiert:
Epoch 1/10
27008/27040 [============================>.] - ETA: 5s - loss: 0.0629 - mean_absolute_error: 0.1428 Epoch 00000: val_loss improved from inf to 0.07595, saving model to dataset/-00-val_loss_with_mymodel-0.08.hdf5
27040/27040 [==============================] - 4666s - loss: 0.0629 - mean_absolute_error: 0.1428 - val_loss: 0.0759 - val_mean_absolute_error: 0.1925
Epoch 2/10
27008/27040 [============================>.] - ETA: 5s - loss: 0.0495 - mean_absolute_error: 0.1287 Epoch 00001: val_loss did not improve
27040/27040 [==============================] - 4605s - loss: 0.0494 - mean_absolute_error: 0.1287 - val_loss: 0.0946 - val_mean_absolute_error: 0.2289
Epoch 3/10
27008/27040 [============================>.] - ETA: 5s - loss: 0.0382 - mean_absolute_error: 0.1119 Epoch 00002: val_loss did not improve
27040/27040 [==============================] - 4610s - loss: 0.0382 - mean_absolute_error: 0.1119 - val_loss: 0.1081 - val_mean_absolute_error: 0.2463
So, what is wrong? Are there any other methods to prevent overfitting?
Does shuffling of data help?
Sie könnten versuchen, eine Dropout-Rate zu erhöhen. Und fügen Sie 'BatchNormalization' nach' dropout's hinzu. –
@ MarcinMożejko, habe ich BatchNormalisierung vor der Aktivierung wie in diesem [Link] vorgeschlagen (http://StackOverflow.com/Questions/34716454/where-do-i-call-the-batchnormalization-function-in-keras). Val_loss erhöht, vorher ohne Insertion war 0,06 und mit Insertion erhalte ich val_loss von 0,09. – SupposeXYZ