2017-01-24 1 views
1

Je modifie this tutorial en matlab où j'essaie de classer la classe 1/0. chacun de mes points de données x est de dimension 30, c'est-à-dire qu'il a 30 caractéristiques. C'est mon premier NN.Normalisation des données avant la fonction d'activation

Mon problème est, lorsque je tente de calculer a1=np.tanh(z1) ou Matlab a1 = tanh(z1); Je reçois soit 1 ou -1 valeurs depuis | z1 |> 2.

  • Devrais-je normaliser les valeurs?
  • Y at-il des promesses que j'ai ratées dans le tutoriel pour rester dans la gamme -2 < z1 < 2?
  • Ai-je raison de supposer que c'est un problème de sortir des limites?

Répondre

3

Les valeurs d'entrée doivent toujours être normalisées, généralement dans la plage [0, 1]. Le réseau pourrait ne pas s'entraîner autrement.

Une autre chose qui mérite d'être notée est que vous utilisez tanh comme activation, et cette fonction sature aux extrêmes, ce qui signifie zéro gradient. Les autres fonctions d'activation comme le ReLU (max (0, x)) n'ont pas ce problème. Cela vaut la peine d'essayer.

+0

... pourquoi vous pourriez utiliser cette forme f (x) = 1.7159 * tanh (2/3x), qui a le maximum de ses dérivées secondes à +1 et -1 pour éviter le problème de saturation (en supposant une entrée normalisée). –

+0

Je vais essayer les deux ainsi qu'un sigmoïde. – havakok

+0

Dans quel point devrais-je normaliser? devrais-je normaliser 'X' ou' z1'? – havakok