Le débogage des réseaux de neurones implique généralement de modifier les hyperparamètres, de visualiser les filtres appris et de tracer des mesures importantes. Pourriez-vous partager les hyperparamètres que vous avez utilisés?
- Quelle est la taille de votre lot?
- Quel est votre taux d'apprentissage?
- Quel type d'autoencodeur utilisez-vous?
- Avez-vous essayé d'utiliser un auto-encodeur de débruitage? (Quelles valeurs de corruption avez-vous essayées?)
- Combien de couches cachées et de quelle taille?
- Quelles sont les dimensions de vos images d'entrée?
L'analyse des journaux d'entraînement est également utile. Tracez un graphique de votre perte de reconstruction (axe Y) en fonction de l'époque (axe X). Votre perte de reconstruction est-elle convergente ou divergente?
Voici un exemple d'auto-encodeur pour la classification de genre humain qui était divergente, a été arrêté après 1500 époques, a fait régler les hyperparamètres (dans ce cas une réduction du taux d'apprentissage), et a redémarré avec les mêmes poids qui divergeaient et finalement convergeaient.
En voici un qui converge: (nous le voulons)
La vanille "sans contrainte" peut rencontrer un problème où elle apprend simplement le mappage d'identité. C'est l'une des raisons pour lesquelles la communauté a créé les saveurs Denoising, Sparse et Contractive.
Pourriez-vous publier un petit sous-ensemble de vos données ici? Je serais plus que disposé à vous montrer les résultats d'un de mes encodeurs automatiques.
Sur une note latérale: vous voudrez peut-être vous demander pourquoi vous utilisez des images de graphiques en premier lieu alors que ces graphiques pourraient facilement être représentés comme un vecteur de données. C'est à dire,
[0, 13, 15, 11, 2, 9, 6, 5]
Si vous êtes en mesure de reformuler le problème comme ci-dessus, vous simplifiez essentiellement la vie de votre encodeur automatique. Il n'a pas d'abord besoin d'apprendre à voir les images avant de pouvoir apprendre la distribution génératrice.
Réponse de suivi (compte tenu des données.)
Voici les filtres d'une 1000 unité cachée, auto-encodeur Denoising monocouche. Notez que certains filtres sont apparemment aléatoires. C'est parce que j'ai arrêté la formation si tôt et que le réseau n'a pas eu le temps d'apprendre ces filtres.
Voici les hyperparamètres avec lesquels je l'ai formé:
batch_size = 4
epochs = 100
pretrain_learning_rate = 0.01
finetune_learning_rate = 0.01
corruption_level = 0.2
J'ai arrêté la pré-formation après la 58e époque parce que les filtres étaient suffisamment bons pour être affichés ici. Si j'étais vous, je formerais un autoencodeur de débruitage empilé à 3 couches avec une architecture 1000x1000x1000 pour commencer.
Voici les résultats de l'étape de réglage fin:
validation error 24.15 percent
test error 24.15 percent
Donc, à première vue, cela semble mieux que le hasard, cependant, lorsque nous examinons la ventilation des données entre les deux étiquettes, nous constatons qu'elle a exactement le même pourcentage (75,85% rentable et 24,15% non rentable). Cela signifie donc que le réseau a appris à répondre simplement «rentable», quel que soit le signal. J'entraînerais probablement cela plus longtemps avec un filet plus grand pour voir ce qui se passe. En outre, il semble que ces données soient générées à partir d'une sorte de jeu de données financières sous-jacent. Je recommanderais que vous examiniez les réseaux de neurones récurrents après avoir reformulé votre problème dans les vecteurs comme décrit ci-dessus. Les RNN peuvent aider à capturer certaines des dépendances temporelles que l'on trouve dans des données de série temporelle comme celle-ci. J'espère que cela t'aides.