web-dev-qa-db-fra.com

Stratégie de régularisation à Keras

J'ai essayé d'installer un problème de régression non linéaire dans Keras. Malheureusement, les résultats montrent qu'il y a sur-ajustement. Voici le code,

model = Sequential()
model.add(Dense(number_of_neurons, input_dim=X_train.shape[1], activation='relu', kernel_regularizer=regularizers.l2(0)))
model.add(Dense(int(number_of_neurons), activation = 'relu', kernel_regularizer=regularizers.l2(0)))
model.add(Dense(int(number_of_neurons), activation='relu', kernel_regularizer=regularizers.l2(0)))
model.add(Dense(int(number_of_neurons), activation='relu',kernel_regularizer=regularizers.l2(0)))
model.add(Dense(int(number_of_neurons), activation='relu',kernel_regularizer=regularizers.l2(0)))
model.add(Dense(outdim, activation='linear'))
Adam = optimizers.Adam(lr=0.001)
model.compile(loss='mean_squared_error', optimizer=Adam, metrics=['mae'])
model.fit(X, Y, epochs=1000, batch_size=500, validation_split=0.2, shuffle=True, verbose=2 , initial_Epoch=0)

Les résultats sans régularisation sont affichés ici Sans régularisation . L'erreur absolue moyenne pour la formation est beaucoup moins élevée que la validation, et les deux ont un écart fixe qui est un signe de sur-ajustement.

La régularisation L2 a été spécifiée pour chaque couche comme ça,

model = Sequential()
model.add(Dense(number_of_neurons, input_dim=X_train.shape[1], activation='relu', kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(int(number_of_neurons), activation = 'relu', kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(int(number_of_neurons), activation='relu', kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(int(number_of_neurons), activation='relu',kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(int(number_of_neurons), activation='relu',kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(outdim, activation='linear'))
Adam = optimizers.Adam(lr=0.001)
model.compile(loss='mean_squared_error', optimizer=Adam, metrics=['mae'])
model.fit(X, Y, epochs=1000, batch_size=500, validation_split=0.2, shuffle=True, verbose=2 , initial_Epoch=0)

Les résultats pour ceux-ci sont indiqués ici résultat régularisé L2 . Le MAE pour le test est proche de la formation ce qui est bien. Cependant, le MAE pour la formation est médiocre à 0,03 (sans régularisation, il était beaucoup plus bas à 0,0028) .

Que puis-je faire pour réduire la formation MAE avec régularisation?

9
trumee

Sur la base de vos résultats, il semble que vous ayez besoin de trouver la bonne quantité de régularisation pour équilibrer la précision de l'entraînement avec une bonne généralisation à l'ensemble de test. Cela peut être aussi simple que de réduire le paramètre L2. Essayez de réduire lambda de 0,001 à 0,0001 et de comparer vos résultats.

Si vous ne trouvez pas un bon réglage de paramètre pour L2, vous pouvez essayer la régularisation du décrochage à la place. Ajoutez simplement model.add(Dropout(0.2)) entre chaque paire de couches denses et testez le taux de décrochage si nécessaire. Un taux d'abandon plus élevé correspond à plus de régularisation.

11
Imran