Question

Je crée un outil pour prédire le temps et le coût des projets logiciels basés sur des données antérieures. L'outil utilise un réseau de neurones pour ce faire et à ce jour, les résultats sont prometteurs, mais je pense que je peux faire beaucoup plus d'optimisation en changeant les propriétés du réseau. Il ne semble pas y avoir de règles ou même beaucoup de meilleures pratiques en matière de ces paramètres si quelqu'un avec l'expérience pouvait me aider je serais très heureux.

Les données d'entrée se compose d'une série de nombres entiers qui pourraient aller aussi haut que l'utilisateur veut aller, mais la plupart sera sous 100 000 je l'aurais pensé. Certains seront aussi bas que 1. Ils sont des détails comme le nombre de personnes sur un projet et le coût d'un projet, ainsi que des détails sur les entités de base de données et les cas d'utilisation.

Il y a 10 entrées au total et 2 sorties (le temps et le coût). J'utilise résiliente propagation pour former le réseau. Actuellement, il a: 10 noeuds d'entrée, une couche cachée avec 5 noeuds et 2 noeuds de sortie. Je suis une formation pour obtenir en un taux d'erreur de 5%.

L'algorithme doit être exécuté sur un serveur web, donc je l'ai mis dans une mesure visant à arrêter l'entraînement quand il semble que cela ne va nulle part. Il est fixé à 10.000 itérations de formation.

À l'heure actuelle, lorsque je tente de former avec des données qui est un peu varié, mais bien dans les limites de ce que nous attendons les utilisateurs à mettre, il faut beaucoup de temps pour former, d'atteindre la limite de 10.000 itération sur et encore.

Ceci est la première fois que je l'ai utilisé un réseau de neurones et je ne sais pas vraiment à quoi nous attendre. Si vous pouviez me donner quelques conseils sur ce genre de paramètres que je devrais utiliser pour le réseau et pour la limite d'itération, je serais très heureux.

Merci!

Était-ce utile?

La solution

Tout d'abord, merci pour fournir tant d'informations sur votre réseau! Voici quelques conseils qui devraient vous donner une image plus claire.

  • Vous devez normaliser vos entrées. Si un nœud voit une valeur moyenne de 100 000 et un autre seulement 0,5, vous ne verrez pas un impact égal des deux entrées. Quelle est la raison pour laquelle vous aurez besoin de les normaliser.
  • seulement 5 neurones cachés pour les noeuds 10 d'entrée Je me souviens avoir lu quelque part que vous avez besoin au moins doubler le nombre d'entrées?; essayez plus de 20 neurones cachés. Cela fournira votre modèle de réseau de neurones la capacité de développer un modèle plus complexe. Cependant, trop de neurones et votre réseau vont simplement mémoriser l'ensemble des données de formation.
  • Resilient rétropropagation est très bien. Rappelez-vous qu'il existe d'autres algorithmes de formation là-bas comme Levenberg-Marquardt.
  • Combien d'ensembles de formation avez-vous? Les réseaux de neurones ont généralement besoin d'un grand ensemble de données pour être bon à faire des prédictions utiles.
  • Pensez à ajouter un facteur de dynamique à votre algorithme poids-formation à accélérer les choses si vous ne l'avez pas déjà fait.
  • La formation en ligne a tendance à être mieux pour faire des prédictions généralisées que la formation par lots. Les anciens poids des mises à jour après avoir exécuté chaque jeu de formation à travers le réseau, tandis que les mises à jour du réseau dernier après avoir passé chaque ensemble de données à travers. Il est votre appel.
  • Votre discrète de données ou continue? Les réseaux de neurones ont tendance à faire un meilleur travail avec 0s et 1s que des fonctions continues. Si c'est le premier, je vous recommande d'utiliser la fonction d'activation sigmoïde. Une combinaison de fonctions d'activation et de tanh linear pour les couches cachées et de sortie ont tendance à faire un bon travail avec des données en continu différentes.
  • Avez-vous besoin d'une autre couche cachée? Il peut être utile si votre réseau traite de la cartographie complexe de surface de sortie d'entrée.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top