J'ai un modèle convolutionnel + LSTM à Keras, similaire à celui-ci (réf 1), que j'utilise pour un concours Kaggle. L'architecture est illustrée ci-dessous. Je l'ai formé sur mon ensemble étiqueté de 11000 échantillons (deux classes, la prévalence initiale est ~ 9: 1, j'ai donc suréchantillonné les 1 à environ un rapport 1/1) pour 50 époques avec une répartition de validation de 20%. pendant un certain temps, mais je pensais qu'il était sous contrôle avec des couches de bruit et d'abandon.
Le modèle avait l'air de s'entraîner à merveille, à la fin, il a obtenu 91% sur l'ensemble de l'ensemble de formation, mais lors des tests sur l'ensemble de données de test, des déchets absolus.
Remarque: la précision de validation est supérieure à la précision de la formation. C'est l'opposé du sur-ajustement "typique".
Mon intuition est que, compte tenu de la petite validation de validation, le modèle parvient toujours à s'adapter trop fortement à l'ensemble d'entrée et perd la généralisation. L'autre indice est que val_acc est supérieur à acc, cela semble louche. Est-ce le scénario le plus probable ici?
Si cela est trop adapté, l'augmentation du fractionnement de validation atténuerait-elle cela, ou vais-je rencontrer le même problème, car en moyenne, chaque échantillon verra toujours la moitié du total des époques?
Le modèle:
Layer (type) Output Shape Param # Connected to
====================================================================================================
convolution1d_19 (Convolution1D) (None, None, 64) 8256 convolution1d_input_16[0][0]
____________________________________________________________________________________________________
maxpooling1d_18 (MaxPooling1D) (None, None, 64) 0 convolution1d_19[0][0]
____________________________________________________________________________________________________
batchnormalization_8 (BatchNormal(None, None, 64) 128 maxpooling1d_18[0][0]
____________________________________________________________________________________________________
gaussiannoise_5 (GaussianNoise) (None, None, 64) 0 batchnormalization_8[0][0]
____________________________________________________________________________________________________
lstm_16 (LSTM) (None, 64) 33024 gaussiannoise_5[0][0]
____________________________________________________________________________________________________
dropout_9 (Dropout) (None, 64) 0 lstm_16[0][0]
____________________________________________________________________________________________________
batchnormalization_9 (BatchNormal(None, 64) 128 dropout_9[0][0]
____________________________________________________________________________________________________
dense_23 (Dense) (None, 64) 4160 batchnormalization_9[0][0]
____________________________________________________________________________________________________
dropout_10 (Dropout) (None, 64) 0 dense_23[0][0]
____________________________________________________________________________________________________
dense_24 (Dense) (None, 2) 130 dropout_10[0][0]
====================================================================================================
Total params: 45826
Voici l'appel à adapter le modèle (le poids de la classe est généralement autour de 1: 1 depuis que j'ai suréchantillonné l'entrée):
class_weight= {0:1./(1-ones_rate), 1:1./ones_rate} # automatically balance based on class occurence
m2.fit(X_train, y_train, nb_epoch=50, batch_size=64, shuffle=True, class_weight=class_weight, validation_split=0.2 )
SE a une règle stupide selon laquelle je ne peux pas poster plus de 2 liens jusqu'à ce que mon score soit plus élevé, voici donc l'exemple au cas où vous seriez intéressé: Ref 1: machinelearningmastery DOT com SLASH séquence-classification-lstm-recurrent-neural-networks- python-keras
la source
Si votre perte d'entraînement est inférieure à votre perte de validation, vous êtes en surapprentissage , même si la validation est toujours en baisse.
C'est le signe que votre réseau apprend des schémas dans le train qui ne sont pas applicables dans celui de validation
la source