2011-02-24 25 views
16

Ho implementato un percettore multistrato per prevedere il peccato dei vettori di input. I vettori consistono in quattro -1,0,1 scelti a caso e un bias impostato su 1. La rete dovrebbe prevedere il peccato di somma dei contenuti dei vettori.La rete neurale multistrato non prevede valori negativi

esempio di ingresso = < 0,1, -1,0,1> Output = Sin (0 + 1 + (- 1) + 0 + 1)

Il problema che sto avendo è che la rete non prevedere mai un valore negativo e molti dei valori sin dei vettori sono negativi. Prevede perfettamente tutte le uscite positive o zero. Presumo che ci sia un problema con l'aggiornamento dei pesi, che vengono aggiornati dopo ogni epoca. Qualcuno ha riscontrato questo problema con NN prima? Qualsiasi aiuto sarebbe fantastico !!

nota: La rete ha 5inputs, 6hidden unità 1 strato nascosto e 1 output.I sto usando una funzione sigmoidale sulle attivazioni nascosti e strati di uscita, e hanno provato tonnellate di tassi di apprendimento (attualmente 0,1);

risposta

11

Essendo passato molto tempo da quando ho esaminato i percettori multistrato, prendi questo con un pizzico di sale.

Vorrei ridimensionare il dominio del problema sul dominio [0,1] anziché su [-1,1]. Se si dà un'occhiata al grafico della funzione logistica:

enter image description here

Esso genera valori tra [0,1]. Non mi aspetto che produca risultati negativi. Potrei sbagliarmi, difficile.

EDIT:

si può effettivamente estendere la funzione logistica al vostro dominio del problema. Utilizza i parametri A e K dell'impostazione generalized logistic curve ai limiti del tuo dominio.

Un'altra opzione è la tangente iperbolica, che va da [-1, + 1] e non ha costanti da impostare.

+0

Grazie mille, questo ha senso! Devo dare un'occhiata in giro per una funzione che può consentire valori negativi. Purtroppo non posso cambiare il dominio del problema come un compito per il college. Grazie ancora! –

+0

@B. Bowles Aggiornato la mia risposta con una possibile soluzione. –

+0

È fantastico, provalo subito! Ci sono molti parametri in quella formula che non si applicano a questa rete, e la matematica non è sicuramente il mio punto di forza. Tuttavia, suona sicuramente come il modo di procedere. –

3

Esistono molti tipi di funzioni di attivazione, molte delle quali sono progettate per generare un valore compreso tra 0 e 1. Se si utilizza una funzione che emette solo tra 0 e 1, provare a regolarla in modo che venga emessa tra 1 e -1. Se stavi usando FANN ti direi di usare la funzione di attivazione FANN_SIGMOID_SYMMETRIC.

+0

sfortunatamente non posso fare uso di alcun libs per questo incarico, se solo! Ho dato un'occhiata a come funziona, grazie molte –

Problemi correlati