4 votes

Neural Network Output : Mise à l'échelle de la plage de sortie

La couche de sortie de mon réseau de neurones (à 3 couches) utilise la fonction sigmoïde comme activation qui produit des sorties uniquement dans la plage [0-1]. Cependant, si je veux l'entraîner pour des sorties qui vont au-delà de [0-1], disons dans les milliers, que devrais-je faire?

Par exemple si je veux entraîner

entrée ----> sortie

0 0 ------> 0

0 1 ------> 1000

1000 1 ----> 1

1 1 -------> 0

Mon programme fonctionne pour les portes logiques AND, OR, XOR, etc. car les entrées et les sorties sont toutes en binaire.

Il y a eu des suggestions d'utiliser,

Activation:


y = lambda*(abs(x)1/(1+exp(-1(x))))

Dérivée de l'activation:


lambda*(abs(y)y(1-y))

Cela n'a pas convergé pour le schéma d'entraînement mentionné (si je n'ai rien fait de mal). Y a-t-il des suggestions s'il vous plaît?

6voto

Amro Points 72743

Pour les problèmes de classification, il est habituel d'utiliser une fonction d'activation sigmoïde/logistique dans la couche de sortie pour obtenir des valeurs de probabilité correctes dans la plage [0,1]; associée à un codage 1-par-N pour la classification multi-classe, chaque sortie de nœud représenterait la probabilité de l'instance appartenant à chaque valeur de classe.

En revanche, si vous avez un problème de régression, il n'est pas nécessaire d'appliquer des fonctions supplémentaires sur la sortie, et vous pouvez simplement prendre la sortie de combinaison linéaire brute. Le réseau apprendra automatiquement les poids pour donner les valeurs de sortie que vous avez (même dans les milliers).

Vous devez également veiller à mettre à l'échelle les caractéristiques d'entrée (en normalisant toutes les caractéristiques dans la plage [-1,1] par exemple).

2voto

Novak Points 1966

Échellez les sorties aux valeurs que vous voulez, ou normalisez les données d'entraînement pour les ramener à une plage de [0,1] sont des solutions évidentes. Je ne trouve aucune raison a priori pour que l'échelle doive être linéaire, non plus (bien qu'elle veuille évidemment être croissante de manière monotone) donc vous pourriez jouer avec des fonctions log, ici.

Quel type de problème êtes-vous en train de résoudre pour avoir de telles gammes de valeurs ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X