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?
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.