Ciao e benvenuto in questo tutorial Python.
Va bene, quindi siamo molto eccitati per il terreno davanti a noi.
Inizieremo creando l'architettura della rete neurale che creeremo la rete neurale che
sarà al centro della nostra intelligenza artificiale e che restituirà l'azione a 90 anni.
Quindi facciamolo.
Quindi, dal momento che vogliamo che la nostra rete neurale sia oggettiva, la faremo diventare classe.
E questo perché è molto più conveniente.
Sai che la classe è il modello di qualcosa che vogliamo costruire.
Vogliamo costruire una rete neurale e abbiamo bisogno di fare una sorta di istruzioni che saranno tutte
contenute nella classe.
E in questa classe faremo due funzioni.
Innanzitutto la funzione init che è la funzione che emerge ogni volta che si fa lezione.
E questo fondamentalmente definisce la variabile del tuo oggetto che è la rete neurale.
Conoscete le variabili associate all'oggetto in contrasto con le variabili globali.
funzione che definirà l'architettura della nuova rete che conosci definendo il livello di input che sarà
composto da cinque neuroni di input perché abbiamo cinque dimensioni per il vettore codificato degli stati di input.
E così questa è in questa
Quindi definiremo alcuni livelli nascosti.
Forse inizierai con uno strato nascosto e poi sarai il benvenuto a provare altre architetture
della rete neurale.
E poi ovviamente finiremo con il livello di output che conterrà le possibili azioni
che possiamo giocare ogni volta.
Questo è esattamente ciò che faremo in questa funzione.
la funzione diretta e che sarà la funzione che attiverà i neuroni nella rete neurale.
E poi faremo un'altra funzione ancora all'interno della classe che sarà
Sapete che questo attiverà i segnali e quindi useremo una funzione di attivazione raddrizzata perché ovviamente
abbiamo a che fare con un problema puramente non lineare e questa funzione rettificata rompe la linearità.
Ma per lo più stiamo facendo questa funzione Ford per restituire i valori q che sono le uscite della rete.
Ma abbiamo un valore chiave per ogni azione.
E in seguito restituiremo l'azione finale prendendo il massimo dei valori chiave o utilizzando un
metodo Max morbido.
Lo vedremo dopo.
Quindi in questo tutorial inizieremo implementando la funzione init e successivamente
il prossimo implementerà la funzione forward.
Quindi facciamolo.
Per prima cosa dobbiamo presentare la nostra classe.
Quindi iniziamo con la lezione e diamo un nome alla nostra classe che è dove possiamo chiamarla rete.
E poi in questa classe di rete userò una tecnica di programmazione degli oggetti che è chiamata ereditarietà
e che è solo per ereditare da tutti gli strumenti di una classe genitore.
Quindi la nostra classe di rete che stiamo per realizzare è un test per bambini di una classe più ampia che è.
E quel modulo.
Quindi è solo per ereditare da tutti gli strumenti di questa classe di moduli che ovviamente sono gli strumenti per
implementare una rete neurale.
Quindi questo è un trucco molto potente ed evolutivo nella programmazione orientata agli oggetti che sta andando in eredità.
E proprio ora stiamo ereditando da questa classe genitore del modulo.
Va bene e ora siamo pronti per entrare nella classe.
Quindi premo invio due volte perché creeremo due funzioni e inizieremo con la
funzione finale.
Quindi la funzione init dobbiamo nominarla in questo modo con due in questo corso e poi dentro.
E poi di nuovo per sottolineare che è solo la sintassi di Python che è proprio come dobbiamo farlo.
E poi dobbiamo mettere gli argomenti.
Quindi abbiamo tre argomenti.
Il primo è un argomento obbligatorio che è in realtà sé e sé.
Non c'è alcun mistero a riguardo che si riferisca all'oggetto che verrà creato da questa classe che stiamo
per realizzare.
Sai che stiamo facendo questa lezione.
È come un'istruzione del modello di questa rete neurale che vogliamo costruire.
E poi, una volta che la classe è pronta, possiamo fare il maggior numero di reti che vogliamo.
E ognuna di queste nuove reti sarà oggetto di questa classe e dato che useremo l'oggetto
per altri scopi di cui abbiamo bisogno, ma quali sono le variabili dell'oggetto e di Spudis, stiamo
usando questo sé per specificare che noi Mi riferisco all'oggetto.
Quindi ogni volta che voglio usare disponibile dal mio oggetto userò self prima della variabile per
specificare che questa è una variabile dell'oggetto.
ovviamente il numero di neuroni di input e il numero di neuroni di output.
Va bene, questo è il primo argomento e quindi abbiamo altri due argomenti che sono
Quindi il numero di neuroni di input lo chiameremo dimensione di input e questo è in realtà
cinque perché i nostri vettori di input hanno cinque dimensioni su tre segnali più orientamento più meno
che sono vettori di valori codificati che descrivono uno stato dell'ambiente.
Questi cinque valori sono sufficienti per descrivere uno stato dell'ambiente.
Avremmo potuto pensare a meno valori o più valori, ma è quello che ho provato e in realtà ha senso perché
in realtà abbiamo bisogno di un segnale da sinistra uno di fronte a noi e uno a destra.
abbiamo questo orientamento e l'orientamento negativo a te sapere tenere traccia dell'obiettivo che stavi cercando di raggiungere.
Sai che quando guidiamo un'auto, potremmo partire per un segnale a 360 ° che conosciamo come i segnali nella parte superiore
delle auto di Google, che possiamo guidare totalmente da soli con tre sensori e quindi
E poi abbiamo ovviamente i neuroni di uscita della nostra rete che corrispondono alle azioni e abbiamo tre azioni
possibili che vanno a sinistra andando dritte o andando a destra.
E quindi lo chiamerò e l'azione e ce ne saranno tre.
Tutto ok.
Finora dobbiamo solo dare nomi agli input e poi useremo queste pallavolo per fare le condizioni all'interno
della rete neurale.
Va bene allora e si inizia usando un altro trucco con la torcia questo trucco è una
superfunzione che è una funzione che eredita effettivamente dal modulo.
Ecco perché abbiamo dovuto usare l'ereditarietà per ereditare anche il modulo.
Questo è il primo da usare.
E quindi fondamentalmente stiamo usando questa superfunzione super trucco per poter usare gli strumenti del modulo che
è molto più efficiente.
E all'interno della superfunzione ho solo bisogno di specificare prima la rete.
classe di rete chul, perché questa è ereditata dal modulo genitore di classe e quindi dal nostro oggetto.
Quindi questa è la nostra
E poi aggiungo solo questo e sono in una funzione come questa esattamente come l'abbiamo chiamata.
Va bene, questo è solo un trucco che serve solo per usare tutti gli strumenti che ho.
E in quel modulo possiamo passare al prossimo passo che è quello di specificare il livello di input.
Quindi, in pratica, quello che devo fare è introdurre una nuova variabile che sarà collegata all'oggetto e
questa variabile conterrà il numero di neuroni di input.
Quindi, per non essere confuso con la dimensione dell'ingresso, la dimensione dell'ingresso è l'argomento della funzione finale.
non è la variabile che è collegata all'oggetto, ma la variabile che è collegata all'oggetto.
Ma quella
Come ho appena detto, è necessario specificare che è invece collegato all'oggetto, quindi usiamo un
autodidatta e ora diamo un nome a questa prima variabile associata all'oggetto.
E quindi possiamo semplicemente dare lo stesso nome dell'input.
Possiamo chiamarlo dimensione di input e diremo che è uguale agli argomenti una funzione che è la dimensione di input.
Tutto ok.
Ogni volta che sto creando un oggetto dalla classe di rete e sto specificando la dimensione dell'input come ad
esempio sto mettendo 5.
Ci sarà di 5 qui e quindi la variabile di input size del nostro oggetto avrà il valore di
5 perché questa dimensione di input sarà 5 e quindi la nostra nuova rete avrà 5 neuroni di input
nel layer di input.
Tutto ok.
E poi è lo stesso per l'altra variabile che vogliamo collegare agli oggetti.
E come avrai intuito, questa sarà una variabile per il numero di neuroni di uscita.
E dire che prendiamo il nostro oggetto di sé e poi diamo un nome a questa
seconda variabile dell'oggetto che chiameremo e all'azione.
E questo sarà uguale a questo argomento qui dato il numero di azioni che è il numero di neuroni
di uscita.
E quindi lo impostiamo in modo uguale all'azione e l'azione sarà uguale a tre.
Pertanto la variabile e l'azione associata al nostro oggetto in una rete otterranno il valore di tre.
In realtà possiamo vedere un avvertimento qui dice un nome indefinito.
E poi bene, perché qui usiamo il.
E poi la scorciatoia.
E dobbiamo usare una scorciatoia qui.
E per le nostre torche partono e in Mudgal e poi scomparirà.
Eccoci qui.
Perfezionare.
Al momento abbiamo nuovi avvisi tutti gli avvertimenti qui sono solo per specificare che ciò che importiamo non è
ancora utilizzato.
Va bene li useremo in seguito.
Bene, allora abbiamo altre due variabili che vogliamo definire per oggetto.
la piena connessione delle connessioni complete tra i diversi strati della nostra rete neurale.
E questa sarà
Quindi visto che adesso vogliamo creare una rete neurale composta da una sola testa nel loro mondo
ci saranno due connessioni complete.
Ci sarà una prima connessione completa tra il livello di input e il livello nascosto.
E un secondo collegamento completo tra la collina e lo strato di uscita.
Quindi iniziamo con la prima connessione completa.
Lo chiameremo SE1 E di nuovo uso qui per specificare che FC uno è una variabile del mio oggetto
per risolverlo.
FC quello che sarà uguale a.
E ora usiamo il modulo N in e useremo una funzione chiamata R lineare e questo è esattamente
per rendere questa connessione completa tra i neuroni e il livello di input ai neuroni del nascosto.
E cosa intendo per connessione completa.
Ciò significa che tutti i neuroni dello strato di input saranno tutti collegati a tutti i neuroni del
Qui in là.
E così per fare questa connessione usiamo questa funzione lineare a cui dobbiamo mettere alcuni argomenti.
E come puoi vedere questi argomenti sono nelle caratteristiche.
Quindi questo è il numero di neuroni della prima legge che vuoi collegare loro caratteristiche che sono il
numero di neuroni del secondo strato che vuoi collegare, cioè il livello a destra che è
lo strato nascosto e la bicicletta è vera.
Quindi, la bicicletta è vera manterremo il valore predefinito che è per avere un pregiudizio e non solo un po
'di peso collegato alla corsa che dovremo aspettare e un pregiudizio per ogni livello.
E così bene vediamo cosa dobbiamo inserire.
Quindi il primo argomento nelle caratteristiche è il numero di neuroni di input nel livello di input.
E quindi dov'è.
Beh, questo è in realtà impreciso.
Questo è l'argomento della nostra funzione di init che più avanti saremo in grado di combattere l'orientamento dei tre
segnali e l'orientamento di Mannus.
Quindi eccoci qui.
Quando i primi argomenti e le dimensioni put e quindi il secondo argomento sono le feature, questo è il numero di
neuroni che vogliamo avere nel secondo livello.
Il secondo livello che sarà completamente connesso al primo strato.
E così ora la domanda è quanti neuroni vogliamo in questo strato nascosto.
Bene, ho fatto un sacco di addestramento sui parametri.
Ho fatto molti esperimenti.
Questo è ciò che facciamo o è ciò che facciamo più in profondità.
In generale facciamo molti esperimenti per vedere quale sarebbe la migliore rete neurale per il nostro
problema specifico.
E così ho provato molti valori e alla fine ho scelto 30 30 run in un livello nascosto e vedrai che
con questo numero otterremo dei risultati piuttosto buoni, ma poi sentirai libero di cambiare l'architettura
della rete neurale.
Sentiti libero di giocarci.
Puoi non solo cambiare il numero di neuroni nel qui e là, ma anche aggiungere altri strati in
modo che tu possa ottenere un'auto ancora migliore, ma 30 neuroni hinna ci procureranno una buona rete neurale e
una buona causa.
Quindi questo è quello che vogliamo.
E noi andiamo.
Abbiamo la nostra prima connessione completa davvero con questa funzione lineare.
Creiamo la connessione tra il livello di input e la gamba nascosta.
E ora è il momento di fare la seconda connessione completa che è la connessione completa tra il livello nascosto
e il livello di output.
Quindi eccoci.
Chiameremo questa seconda connessione completa in C2.
Eccoci.
Eppure questo è disponibile per più oggetti usando Saphir.
E poi usiamo di nuovo.
Beh, in realtà possiamo copiare questo perché useremo il modulo N nel modulo e poi la funzione lineare.
Ma poi dobbiamo prima cambiare gli argomenti, naturalmente.
Questo è lo stesso primo è il numero di neuroni che avremo nel primo strato della connessione.
Quindi questo è il nascosto lì.
E quindi questo è 30 e quindi il secondo argomento è il numero di neuroni nel secondo strato
della connessione e che corrisponde al livello di output e all'output che c'è.
E i neuroni reali che in seguito saranno tre perché abbiamo tre possibili azioni ma finora dobbiamo
usare i nomi che abbiamo definito.
il nome dell'argomento della funzione init e quindi inseriamo qui e l'azione e così via.
Questo è
Prima di tutto le nostre connessioni tuple ri.
E in secondo luogo, qualsiasi funzione è Israele.
Questo è ciò che inizializzeremo il nostro oggetto ogni volta che creiamo un oggetto dalla classe di rete.
E così, non appena creiamo un oggetto, tutte queste variabili per variabili qui immettono dimensione e reazione.
Tu e due saranno definiti.
Ed è così che otterremo l'architettura della nostra rete di animali per ogni oggetto che creiamo.
corrisponderà a una rete neurale di cinque neuroni di input 30 neuroni nascosti e tre neuroni di uscita.
Ogni oggetto
Quindi eccoci.
Abbiamo finito con questa prima funzione e ora possiamo passare alla seconda funzione che è la
funzione in avanti e che verrà utilizzata per attivare i neuroni nella rete neurale usando la funzione di
attivazione del raddrizzatore e soprattutto per tornare ai valori del cubo che sono le uscite di una sola rete.
Quindi non vedo l'ora di farlo nel prossimo tutorial e fino a quel momento.