Table di cuntinutu[Piattà][Mostra]
U cervellu hè paragunabile à e rete neurali. Questa hè l'analogia chì hè tipicamente aduprata per aiutà à qualchissia novu à u sughjettu per capisce l'idee daretu à l'apprendimentu automaticu è e rete neurali artificiali.
Perchè ci sò parechje strati di computazioni matematiche è statistiche chì passanu daretu à i sceni, definisce queste rete cum'è una funzione matematica hè un metudu più avanzatu.
Questu hè per e persone chì sò veramente interessate in l'apprendimentu automaticu è volenu vede cumu hè scrittu u codice di a rete neurale Python.
In questu articulu, dimustraremu cumu custruisce una rete neurale profonda (DNN) cumplettamente cunnessa da zero. pitone 3.
Una panoramica di a struttura di u schedariu per u nostru codice di rete neurale Python
Ci saranu trè schedari creati quì. U primu hè u schedariu nn.py simplice, chì serà discututu in "Setting Up Helper Functions" è "Custruisce a Rete Neurale da zero".
Averemu ancu un schedariu chjamatu mnist loader.py per carricà i dati di prova, cum'è descrittu in "Carica di dati MNIST".
Infine, averemu un schedariu chjamatu test.py chì serà lanciatu in u terminal per pruvà a nostra rete neurale.
Stu schedariu hè descrittu in detail in "Test di esecuzione".
stallanu
A libreria NumPy Python deve esse scaricata per seguità stu tutoriale. Pudete fà questu utilizendu u cumandimu seguitu nantu à u terminal:
Importazione di Moduli è stallazione di a funzione Helper
L'unichi dui biblioteche chì avemu bisognu sò casuale è NumPy, chì impurtaremu subitu. Per i pesi iniziali di a nostra rete neurale, i mischiaremu usendu a biblioteca aleatoria.
Per accelerà i nostri calculi, useremu NumPy o np (per cunvenzione, hè spessu impurtatu cum'è np). I nostri dui funzioni d'aiutu seranu fatti dopu à e nostre impurtazioni. Dui funzioni sigmoide: una è sigmoide prima.
A regressione logistica classificà e dati utilizendu a funzione sigmoide, mentre chì a retropropagazione calculerà u delta o gradiente utilizendu a funzione prima sigmoide.
Crea una Classe di Rete
Custruì una rete neurale cumplettamente ligata hè l'unicu focus di sta sezione. A classa di a rete includerà tutte e funzioni chì venenu dopu. A funzione Object () { [codice nativu] } serà creatu inizialmente in a nostra classa di rete.
Un argumentu, dimensioni, hè necessariu da a funzione Object () { [codice nativu] }. A variabile di dimensioni hè una cullizzioni di valori numerichi chì rapprisentanu u numeru di nodi di input prisenti in ogni capa di a nostra rete neurale.
Inizialemu quattru proprietà in u nostru metudu __init__. I variàbili di input, sizes, sò usati per stabilisce a lista di taglie di strati è u numeru di strati, num layers, rispettivamente.
U primu passu hè di assignà aleatoriamente i preghjudizii iniziali di a nostra rete à ogni capa chì seguita a capa di input.
Infine, ogni ligame trà i strati di input è output hà i so pesi generati aleatoriamente. Np.Random.Randn() dà una mostra aleatoria tirata da a distribuzione normale per u cuntestu.
Funzione Feed Forward
In una rete neurale, l'infurmazione hè mandata avanti da a funzione feedforward. Un argumentu, a, chì indica u vettore di attivazione attuale, serà dumandatu da sta funzione.
Questa funzione stima l'attivazioni à ogni strata iterendu nantu à tutti i preghjudizii è i pesi in a reta. A risposta data hè a predizione, chì hè l'attivazione di l'ultima capa.
Mini-batch Gradient Descent
U cavallu di travagliu di a nostra classe Network hè Gradient Descent. In questa versione, usemu mini-batch (stochastic) gradient descent, una variazione mudificata di gradient descent.
Questu indica chì un picculu batch di punti di dati serà utilizatu per aghjurnà u nostru mudellu. Quattru richiesti è un argumentu facultativu sò passati à stu metudu. I quattru variàbili necessarii sò l'inseme di dati di furmazione, u numeru di epoche, a dimensione di i mini-batch, è a rata di apprendimentu (eta).
I dati di prova sò dispunibili nantu à dumanda. Forniremu dati di prova quandu eventualmente valuteremu sta rete. U numaru di campioni in questa funzione hè inizialmente stabilitu à a durata di a lista una volta chì i dati di furmazione sò stati trasfurmati in un tipu di lista.
Avemu ancu applicà u stessu prucessu per pruvà a dati chì hè datu in. Questu hè perchè invece di esse tornatu à noi cum'è listi, sò veramente zips di listi. Quandu carichemu i campioni di dati MNIST più tardi, sapemu più nantu à questu.
Se pudemu assicurà chì furnisce i dui tipi di dati cum'è listi, allora stu tipu di casting ùn hè micca necessariamente essenziale.
Una volta avemu i dati, andemu nantu à l'epica di furmazione in un ciclu. Un periodu di furmazione hè solu una volta di furmazione di rete neurale. Prima mischiamu i dati in ogni epoca per assicurà l'aleatoriu prima di fà una lista di mini-batch.
A funzione mini batch di l'aghjurnamentu, chì hè discutitu quì sottu, serà chjamata per ogni mini-batch. A precisione di a prova serà ancu restituita se i dati di prova sò dispunibili.
Funzione d'aiutu di u costu-derivatu
Sviluppemu una funzione d'aiutu chjamata derivata di u costu prima prima di creà veramente u codice di retropropagazione. Se facemu un sbagliu in a nostra capa di output, a funzione derivativa di u costu a mostrarà.
Esige dui inputs: l'array di attivazioni di output è e coordenate y di i valori di output anticipati.
Funzione di backpropagation
U nostru vettore di attivazione attuale, attivazione, è ancu qualsiasi altri vettori di attivazione, attivazioni, è vettori z, zs, deve esse tenutu in mente. Una strata chjamata a strata di input hè attivata prima.
Passeremu à traversu ogni preghjudiziu è pesu dopu avè messu. Ogni loop implica u calculu di u vettore z cum'è u pruduttu puntu di i pesi è l'attivazione, aghjunghjendu à a lista di zs, recalculating l'attivazione, è aghjunghje l'attivazione aghjurnata à a lista di attivazioni.
Infine, a matematica. U delta, chì hè uguali à l'errore da a capa precedente multiplicata da u primu sigmoide di l'ultimu elementu di i vettori zs, hè calculatu prima di principià u nostru passaghju in daretu.
L'ultimu stratu di nabla b hè stabilitu per esse u delta, è l'ultimu stratu di nabla w hè stabilitu per esse u produttu di punti di u delta è l'ultimu stratu di attivazioni (trasposti cusì pudemu fà veramente a matematica) .
Procedemu cum'è prima, cumincendu cù a seconda capa è cuncludendu cù l'ultima, è ripetite u prucessu dopu à cumpiendu queste ultime strati. I nablas sò poi restituiti cum'è una tupla.
Aghjurnà a discesa di gradiente Mini-batch
U nostru metudu SGD (descente di gradiente stochasticu) da prima incorpora l'aghjurnamentu di mini-batch. Siccomu hè utilizatu in SGD, ma ancu esige backprop, aghju discututu induve mette sta funzione.
Infine, aghju fattu a scelta di postà quì. Accumincia per generà 0 vettori di i nablas di i biasi è i pesi, cum'è a nostra funzione backprop.
Hè bisognu di u mini-batch è u tassu di apprendimentu eta cum'è i so dui inputs. In u mini-batch, allora usemu a funzione backprop per ottene u delta di ogni array nabla per ogni input, x, è output, y. I listi di nabla sò allora aghjurnati cù questi delta.
Infine, usemu a tarifa di apprendimentu è i nablas per aghjurnà i pesi è i preghjudizii di a rete. Ogni valore hè aghjurnatu à u valore più recente, menu u ritmu di apprendimentu, multiplicatu da a dimensione di minibatch, è dopu aghjustatu à u valore nabla.
Evaluate a funzione
A funzione evaluate hè l'ultima chì avemu bisognu di scrive. I dati di prova sò l'unicu input per sta funzione. In questa funzione, paragunemu solu i outputs di a reta cù u risultatu previstu, y. Alimentando l'input, x, avanti, i outputs di a reta sò determinati.
Codice cumpletu
Quandu avemu cumminatu tuttu u codice, questu hè cumu si vede.
Testa a Rete Neurale
Caricamentu di dati MNIST
lu Dati MNIST hè in formatu .pkl.gz, chì avemu da apre cù GZIP è carica cù pickle. Scrivemu un metudu rapidu per carricà sta dati cum'è una tupla di grandezza trè, divisa in furmazione, validazione è dati di prova.
Per fà i nostri dati più faciuli di gestisce, scriveremu una altra funzione per codificà l'y in un array di 10 elementi. L'array serà tutti 0 eccettu per un 1 chì currisponde à u cifru propiu di l'imaghjini.
Avemu Mulateri Di L'usu di i dati di basa di carica è un mètudu di codifica calda à carica i nostri dati in un furmatu leghjite. Un'altra funzione serà scritta chì cunvertisce i nostri valori x in una lista di dimensione 784, chì currisponde à i 784 pixel di l'imaghjini, è i nostri valori y in a so forma unica di vettore codificata calda.
Allora combineremu i valori x è y in modu chì un indice currisponde à l'altru. Questu hè applicatu à a furmazione, a validazione è a data di prova. Dopu turnemu i dati cambiati.
Testi di corsa
Faremu un novu schedariu chjamatu "mnist loader" chì impurtarà sia a rete neurale chì avemu stabilitu prima (nn simplice) è u caricatore di data set MNIST prima di inizià a prova.
In questu schedariu, tuttu ciò chì ci vole à fà hè impurtà e dati, custruisce una rete cù una dimensione di strata di input di 784 è una dimensione di strata di output di 10, eseguisce a funzione SGD di a rete nantu à i dati di furmazione, dopu pruvà cù i dati di prova.
Tenite in mente chì per a nostra lista di strati d'input, ùn face micca differenza ciò chì qualsiasi di i numeri sò trà 784 è 10. Pudemu cambià l'altri strati in ogni modu chì ci piace; solu e dimensioni di input è output sò fissi.
Trè strati ùn sò micca necessariu; Puderemu aduprà quattru, cinque, o ancu solu dui. Divertitevi à sperimentà cun ellu.
cunchiusioni
Quì, usendu Python 3, creemu una rete neurale da zero. Inseme cù a matematica d'altu livellu, avemu ancu discututu e specificità di implementazione.
Avemu principiatu cù l'implementazione di funzioni d'aiutu. Per u funziunamentu di i neuroni, e funzioni prima sigmoide è sigmoide sò cruciali. Dopu mettemu in pratica a funzione feedforward, chì hè u prucessu fundamentale per l'alimentazione di dati in a rete neurale.
In seguitu, avemu creatu a funzione di discendenza di gradiente in Python, u mutore chì guida a nostra rete neurale. Per situà i "minimi lucali" è ottimisà i so pesi è preghjudizii, a nostra rete neurale usa a discesa di gradiente. Avemu creatu a funzione di backpropagation usendu discesa di gradiente.
Fornendu l'aghjurnamenti quandu i risultati ùn currispondenu micca à l'etichette adatte, sta funzione permette à a rete neurale di "amparà".
Infine, mettemu u nostru novu Python reta neurale à a prova utilizendu u set di dati MNIST. Tuttu hà funzionatu bè.
Felice Codificazione!
Lascia un Audiolibro