2011-02-24 1 views
16

J'ai implémenté un perceptron multicouche pour prédire le sinus des vecteurs d'entrée. Les vecteurs sont constitués de quatre -1,0,1 choisis au hasard et d'un biais fixé à 1. Le réseau devrait prédire le sinus de la somme des vecteurs.Le réseau de neurones multicouche ne va pas prédire les valeurs négatives

par exemple Input = < 0,1, -1,0,1> Output = Sin (0 + 1 + (- 1) + 0 + 1)

Le problème que je rencontre est que le réseau Ne jamais prédire une valeur négative et beaucoup de valeurs de péché des vecteurs sont négatives. Il prédit parfaitement toutes les sorties positives ou nulles. Je présume qu'il y a un problème avec la mise à jour des poids, qui sont mis à jour après chaque époque. Quelqu'un at-il déjà rencontré ce problème avec NN? Toute aide serait géniale!!

note: Le réseau a 5 entrées, 6 unités cachées dans 1 couche cachée et 1 sortie. J'utilise une fonction sigmoïde sur les activations cachées et les couches de sortie, et j'ai essayé des tonnes de taux d'apprentissage (actuellement 0,1);

Répondre

11

Etre longtemps depuis que j'ai regardé dans les perceptrons multicouches prend donc cela avec un grain de sel.

Je redimensionner votre domaine de problème au domaine [0,1] au lieu de [-1,1]. Si vous jetez un coup d'oeil au graphique de la fonction logistique:

enter image description here

Il génère des valeurs entre [0,1]. Je ne m'attends pas à ce qu'il produise des résultats négatifs. Je peux me tromper, dur.

EDIT:

Vous pouvez effectivement étendre la fonction logistique à votre domaine de problème. Utilisez les paramètres A et K generalized logistic curve pour définir les limites de votre domaine.

Une autre option est la tangente hyperbolique, qui va de [-1, + 1] et n'a pas de constantes à mettre en place.

+0

Merci beaucoup, ça a du sens! Il faut jeter un coup d'oeil autour d'une fonction qui peut permettre des valeurs négatives. Malheureusement, je ne peux pas changer le domaine du problème comme une tâche pour l'université. Merci encore! –

+0

@B. Bowles Mis à jour ma réponse avec une solution possible. –

+0

C'est génial, je vais essayer maintenant! Il y a beaucoup de paramètres dans cette formule qui ne s'appliquent pas à ce réseau, et les maths ne sont certainement pas mon point fort. Cela semble certainement être la voie à suivre. –

3

Il existe différents types de fonctions d'activation, dont beaucoup sont conçues pour afficher une valeur comprise entre 0 et 1. Si vous utilisez une fonction qui ne sort qu'entre 0 et 1, essayez de l'ajuster pour qu'elle sorte entre 1 et -1. Si vous utilisiez FANN je vous dirais d'utiliser la fonction d'activation FANN_SIGMOID_SYMMETRIC.

+0

malheureusement je ne peux pas utiliser de libs pour cette affectation, si seulement! J'ai un regard sur comment cela fonctionne, merci beaucoup –

Questions connexes