2010-10-14 34 views
7

Sto provando ad aggiungere al codice una rete neurale a strato singolo che accetta come input una bitmap e ha 26 uscite per la probabilità di ogni lettera dell'alfabeto.Rete neurale per riconoscimento lettere

La prima domanda che ho riguarda il singolo livello nascosto che viene aggiunto. Ho ragione nel ritenere che il livello nascosto abbia il proprio insieme di valori di output e solo pesi? Non ha bisogno di avere il proprio pregiudizio '?

Posso anche confermare che sto pensando all'aspetto feedforward in modo corretto? Ecco alcuni pseudocodice:

// input => hidden 
for j in hiddenOutput.length: 
    sum=inputs*hiddenWeights 
    hiddenOutput[j] = activationFunction(sum) 
// hidden => output 
for j in output.length: 
    sum=hiddenOutputs*weights 
    output[j] = activationFunction(sum) 

Supponendo che è corretto, sarebbe la formazione sia qualcosa di simile?

def train(input[], desired[]): 
    iterate through output and determine errors[] 
    update weights & bias accordingly 
    iterate through hiddenOutput and determine hiddenErrors[] 
    update hiddenWeights & (same bias?) accordingly 

Grazie in anticipo per qualsiasi aiuto, ho letto tanti esempi e tutorial e sto ancora problemi determinare come fare tutto correttamente.

+4

È questo compito? Se è così, taggalo come tale. Che sia o non sia, sperimenta; Ho imparato tonnellate dai miei fallimenti nella simulazione di reti neurali introduttive. Non è che creerai accidentalmente SkyNet e il declino dell'umanità o del sumptin. – msw

+1

sì, è ora taggato.sto sperimentando ma sfortunatamente lo stato attuale si sta comportando molto male, quindi ovviamente sto facendo qualcosa di sbagliato – dylan

risposta

1

Dylan, probabilmente è molto tempo dopo che il compito a casa è scaduto, ma ho qualche idea su ciò che hai pubblicato.

  • Rende il livello nascosto molto più grande della dimensione dei bitmap di input.
  • È necessario disporre di pesi e bias diversi da input -> nascosto che da hidden -> output.
  • Dedica molto tempo alla funzione di errore (discriminatore).
  • Comprendere che le reti neurali hanno la tendenza a bloccarsi rapidamente in un set di pesi (in genere non corretti). Avrai bisogno di ricominciare e allenarti in un ordine diverso.

La cosa che ho imparato sulle reti neurali è che non si sa mai perché stanno lavorando (o non funzionano). Solo questo è un motivo per tenerlo fuori dai campi della medicina e della finanza.

+0

Se non sbaglio il problema principale con le reti neurali è che non c'è modo (ancora) di trovare un globale minimo per le funzioni di errore. Applicare "impulso", "tasso di apprendimento adattivo" e altri potrebbero aiutare a trovare un minimo più veloce, ma non puoi mai mostrare se è il minimo globale. Ciò significa che è necessario ricominciare da capo con approcci diversi e cercare di trovare un minimo accettabile, in modo che la rete funzioni correttamente. – displayname

0

si potrebbe voler leggere http://www.ai-junkie.com/ann/evolved/nnt1.html. lì cita esattamente qualcosa su quello che stai facendo. Ha anche fornito il codice insieme a una (principalmente) semplice spiegazione di come apprende. Sebbene l'aspetto dell'apprendimento sia completamente diverso dal feed-forward, questo dovrebbe spero darti qualche idea sulla natura di NN.

È mia opinione che anche i livelli nascosto e di output dovrebbero avere un bias.

Anche NN può essere difficile, provare prima a identificare solo 1 lettera. Ottenere un segnale alto/basso coerente da una sola uscita. Quindi cerca di mantenere quel segnale con diverse varianti della stessa lettera. Quindi puoi progredire e aggiungere altro. Potresti farlo insegnando a 26 reti diverse che danno un risultato solo su una partita. O forse lo fai come un grande NN con 26 uscite. Due approcci diversi.

Problemi correlati