Plus de précision de validation, de formation accurracy à l'aide de Tensorflow et Keras
Je suis en train d'utiliser l'apprentissage en profondeur de prévoir des revenus de 15 auto-rapporté des attributs à partir d'un site de rencontre.
Nous sommes d'obtenir des résultats bizarres, où nos données de validation est d'obtenir une meilleure précision et une diminution de la perte, de nos données d'entraînement. Et cela est conforme au travers de différentes tailles de couches cachées.
C'est notre modèle:
for hl1 in [250, 200, 150, 100, 75, 50, 25, 15, 10, 7]:
def baseline_model():
model = Sequential()
model.add(Dense(hl1, input_dim=299, kernel_initializer='normal', activation='relu', kernel_regularizer=regularizers.l1_l2(0.001)))
model.add(Dropout(0.5, seed=seed))
model.add(Dense(3, kernel_initializer='normal', activation='sigmoid'))
model.compile(loss='categorical_crossentropy', optimizer='adamax', metrics=['accuracy'])
return model
history_logs = LossHistory()
model = baseline_model()
history = model.fit(X, Y, validation_split=0.3, shuffle=False, epochs=50, batch_size=10, verbose=2, callbacks=[history_logs])
Et c'est un exemple de la précision et de pertes:
.
Nous avons essayé de le supprimer de régularisation et d'abandon, qui, comme prévu, a terminé dans le surajustement (formation acc: ~85%). Nous avons même essayé de diminuer le taux d'apprentissage de façon spectaculaire, avec des résultats similaires.
Quelqu'un a vu des résultats similaires?
- J'ai rencontré le même problème plusieurs fois maintenant. stats.stackexchange.com/questions/372146/.... toute aide est très appréciée
Vous devez vous connecter pour publier un commentaire.
Ce qui se passe lorsque vous utilisez
Dropout
, car le comportement lors de la formation et de test sont différentes.Lors de la formation, un pourcentage des fonctionnalités sont mis à zéro (50% dans votre cas, puisque vous utilisez
Dropout(0.5)
). Lors de l'essai, toutes les fonctionnalités sont utilisées (et sont mises à l'échelle appropriée). Ainsi, le modèle à temps de test est plus robuste et peut entraîner une augmentation des tests de précision.Vous pouvez vérifier l' Keras FAQ et en particulier la section "Pourquoi la formation est-elle la perte beaucoup plus élevé que les tests de perte?".
Je voudrais aussi vous suggère de prendre le temps et de lire ce très bon l'article concernant certains "vérifications" vous devez toujours prendre en considération lors de la construction d'un NN.
En outre, chaque fois que possible, vérifiez si votre résultats du sens. Par exemple, dans le cas d'un n-classe de la classification catégorielle de la croix de l'entropie de la perte sur la première époque doit être
-ln(1/n)
.En dehors de votre cas particulier, je crois qu'en dehors de la
Dropout
le jeu de données de split peut parfois entraîner dans cette situation. Surtout si le jeu de données de split n'est pas aléatoire (dans le cas où temporelle ou spatiale des modèles existent) l'ensemble de validation peuvent être fondamentalement différentes, j'.e moins de bruit ou moins de variance, de la gare et donc plus facile à prédire conduire à plus de précision sur l'ensemble de validation que sur la formation.En outre, si l'ensemble de validation est très petite par rapport à la formation puis par hasard, le modèle correspond le mieux à l'ensemble de validation de la formation.]
Ce fait assez souvent de la situation. Quand il n'y a pas tellement de la variance dans votre jeu de données, vous pouvez demander à ce type de comportement. Ici vous pouviez trouver une explication du pourquoi de ce qui pourrait arriver.
Cela indique la présence d'une forte polarisation dans votre jeu de données. Il est underfitting. Les solutions au problème sont:-
Probablement le réseau a du mal à s'adapter à la formation de données. Donc, essayez un
peu plus grand réseau.
Essayez un autre Réseau de Neurones Profonds. Je veux dire, le changement de l'architecture
un peu.
Train pour plus de temps.
Essayez d'utiliser des avancées des algorithmes d'optimisation.