Тёмный

Introduzione Alle Reti Neurali 05: L'Addestramento Automatico 

Riccardo Talarico
Подписаться 4,5 тыс.
Просмотров 28 тыс.
50% 1

Con questo video si conclude la serie introduttiva sulle reti neurali. Utilizzeremo python per automatizzare l'addestramento della rete neurale che ci ha accompagnato per i precedenti video
LINK:
CODICE COMMENTATO:
gist.github.com/RiccardoTalar...
PYTHON TUTOR:
pythontutor.com/visualize.html...
DONAZIONI:
Paypal: www.paypal.me/RTalarico

Опубликовано:

 

4 окт 2018

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 71   
@massimilianoziliotto255
@massimilianoziliotto255 2 года назад
È la prima volta che mi sento in obbligo di commentare un video. Ottima presentazione, semplice, piacevole, pratica. Grazie mille
@michelacampitiello6431
@michelacampitiello6431 10 месяцев назад
lo so che arrivo dopo anni, ma ti ho adorato dal primo fino all'ultimo video. Chiaro, preciso e divertente
@Gabbosauro
@Gabbosauro 2 года назад
I video sono fatti veramente bene e spiegati in modo molto comprensibile. Abbiamo bisogno del seguito!
@gervasioosbello6236
@gervasioosbello6236 12 дней назад
Complimenti , fatto molto bene e con la giusta ironia per tener svegli i più distratti :)
@mattiamincarini424
@mattiamincarini424 5 лет назад
Ti prego continua! Mi sta intrigando moltissimo!
@manculicani
@manculicani Год назад
Complimenti per la serie di video che hai realizzato. La migliore che ho trovato sul tema
@davidgiustini922
@davidgiustini922 8 месяцев назад
Complimenti per i video, davvero ottima spiegazione!!
@sergiogottardi
@sergiogottardi Год назад
Se in prima battuta ... dovessi dire tutto chiaro chiarissimo e quindi ... chiamato alla lavagna e messo sotto interrogazione di verifica ... allora la cosa sarebbe dura ... se invece dovessi rispondere in termini di traccia mentale complessiva ... allora direi che l'ascolto è stato estremamente stimolante e piacevole ... ovvero ... sarebbe come osservando uno scultore mentre opera - a lavoro, ovviamente. non ancora avanzato. intravedere - la sagoma e il volto del personaggio trattato ... Insomma ... scusandomi per lo svolazzo metaforico ...DICO GRAZIE per questa fresca e piacevolissima disinvolta serie di LEZIONI ...
@andreapellegrino2175
@andreapellegrino2175 4 года назад
Sei un grande. Semplice, chiaro, ottimi esempi.
@martino577
@martino577 3 года назад
Ottimi video, davvero complimenti!
@leno3039
@leno3039 3 года назад
Ottima serie di video, super chiari ed approfonditi al punto giusto. Complimenti!
@giorgiocarlodepetri6228
@giorgiocarlodepetri6228 2 года назад
Arrivo in ritardo, ma devo complimentarmi, con l'augurio di trovare videolezioni di pari valore.
@robert-kw2tm
@robert-kw2tm 5 лет назад
Grande davvero bel video Sarebbe bello se ne facessi altri
@giabo67
@giabo67 2 года назад
secondo me sei davvero bravo a spiegare. ti prego continua
@clav7711
@clav7711 Год назад
la scopro solo ora questa serie peccato sia finita. Complimenti per il modo di insegnare.
@azic1467
@azic1467 3 года назад
Bellissimo e interessantissimo video!
@davidch.6593
@davidch.6593 4 года назад
Hai fatto un bel lavoro, complimenti
@LUDOVICOPAPALIA
@LUDOVICOPAPALIA 4 года назад
Studio giurisprudenza ma riesco comunque a capire tutti i video. Spieghi benissimo! Mi raccomando continua a farli!
@federicodambrosio
@federicodambrosio 3 года назад
Grazie mille molto interessante!
@AlfonsoC.7593
@AlfonsoC.7593 5 лет назад
Veramente interessanti e ben fatti, spero presto tu possa fare i video di approfondimento. Molto utili i riferimenti agli strumenti presenti in rete !!! Grazieee !!
@riccardotalarico4263
@riccardotalarico4263 5 лет назад
Grazie mille! Attualmente è in programma una serie sul machine learning applicato usando scikit-learn
@Victor-fi7lc
@Victor-fi7lc Год назад
SEI UN GRANDE
@lotationx8987
@lotationx8987 4 года назад
Torna per favore, sei il migliore
@federicoantonucci9041
@federicoantonucci9041 5 лет назад
Ottimi video, davvero complimenti! A quando altri?
@lucamattioni7690
@lucamattioni7690 5 лет назад
Mi sono perso il tuo video precedente., ma comunque sono felice che tu sia tornato su yt: continua così😁 spieghi molto bene
@riccardotalarico4263
@riccardotalarico4263 5 лет назад
Grazie davvero per il supporto!
@lucamattioni7690
@lucamattioni7690 5 лет назад
@@riccardotalarico4263 non c'è di che, te lo meriti
@DanieleScali
@DanieleScali 5 лет назад
molto molto molto bravo
@awakedreamer1859
@awakedreamer1859 Год назад
L'unico che non fa sfoggio inutile e incomprensibile di cose "fighe" a caso che poi non capisce nessuno. Grazie. Volevo aggiungere che trovo didatticamente sensato non usare le librerie di python da subito ma fare le cose "a mano" all'inizio, perchè permette di mettere in pratica la teoria che davvero è stata spiegata così come è stata spiegata. Senza scorciatoie. Diversamente avrebbe creato solo confusione in un argomento già molto molto difficile. In tutti gli altri video che ho visto serve un dottorato nelle singole librerie che hanno usato per capire cosa stiano facendo e la teoria non viene nemmeno spiegata bene.
@albertocesaretti9785
@albertocesaretti9785 Год назад
Complimenti, serie di video molto comprensibili perché spiegato con un esempio pratico. Potresti forse scrivere anche un libro, magari implementando una rete più complessa. Grazie
@Knighthell75
@Knighthell75 Год назад
che figata
@ferdinandodavino2388
@ferdinandodavino2388 5 лет назад
Vogliamo la prossima
@giuseppecesarino1859
@giuseppecesarino1859 3 года назад
grazie
@andreap5420
@andreap5420 5 лет назад
È davvero un piacere seguire queste lezioni, quando farai uscire altro?
@sky741
@sky741 5 лет назад
389 iscritti questo qui spiega le cose meravigliosamente bene.. poi vai in un canale qualsiasi di dementi e trovi k iscritti. evidentemente qualcosa non funziona
@riccardotalarico4263
@riccardotalarico4263 5 лет назад
Grazie per il feedback positivo!
@andreavolpedifuoco2548
@andreavolpedifuoco2548 5 лет назад
Ti prego continua i video
@daviderossi7383
@daviderossi7383 5 лет назад
Riccardo dove sei??? Ci manchi
@nelloangelococuzza1219
@nelloangelococuzza1219 4 года назад
Ciao molto interessante l'articolo, faccio una osservazione: Lanciando più volte il codice ogni tanto notavo che il risultato non era corretto, al che ho cercato di approfondire. Mi sono accorto che per i seguenti combinazioni di pesi iniziali, il risultato era errato. Quindi: Invece di impostare random i pesi e il bias iniziale, ho impostato i valori in maniera fissa; w1 = 0.93 w2 =0.13 b=0.30 il risultato è che tutti i gatti hanno come obiettivo 1 -> che in altre parole sono tutti uguali. Tengo presente che sia le iterazioni che il valore del learning li ho lasciati come da esempio. Analizzando più affondo Il problema ho notato che per certi valori di partenza il Sigmoide è talmente piccolo che non basta il numero di iterazioni o il valore di learning precedentemente impostato. Quindi segue la domanda : dato che l'algoritmo è sensibile ai valori di partenza, come calibrare i valori di iterazione/learnig e i pesi di modo chè la RN dia sempre un risultato coerente ?? Grazie
@giacomogallucci3340
@giacomogallucci3340 Год назад
grande! davvero bravo! spiegazione ottima! Posso farti una domanda? Qualsiasi tipo di intelligenza artificiale ha come base le reti neurali?
@fabrizio3672
@fabrizio3672 4 года назад
Innanzitutto grazie per la serie di video. Una cosa non mi torna a livello di calcolo: alla fine quando fai vedere i dati per il point 7 (quindi ottava cell di valori nell’array) hai una dcost_dpred di -0.0135 e una dpred_dz di 0.0067. Come fa dcost_dz a venire 0.0006? Innanzitutto il segno già dovrebbe essere negativo e poi il prodotto dovrebbe essere intorno a -0.00009. Grazie!
@raffaelegreco3337
@raffaelegreco3337 5 лет назад
Complimenti per il video, sto effettuando la mia tesi di laurea sulle reti neurali applicate ad eventi franosi, mi spiego meglio praticamente attraverso la lettura di alcune matrici che contengono dati numerici quali ad esempio pendenza del terreno, angolo di esposizione ecc ecc ed attraverso zone note in cui sono avvenute delle frane, devo valutare se altre parti del territorio possono essere soggette a frana o meno. Ora io non ho mai programmato quindi non saprei proprio come partire e nemmeno dove poter trovare qualcosa che mi possa aiutare. chi può darmi qualche consiglio?
@EmanueleCorsi
@EmanueleCorsi 4 года назад
Grazie, diciamo che è la prima volta che capisco sul serio i concetti alla base (gli esempi pratici funzionano sempre, c'è poco da fa'). Mi vengono però due domande, se "ascolti" ancora magari mi rispondi. a) Che succede se ho più di due possibili catalogazioni? Se ad esempio i gatti fossero di tre tipi anziché due, non sarebbe più sufficiente la Sigmoide? b) facciamo un passo indietro, non ho capito perché trasformi i numeri grossi in numeri più piccoli, tipo da 50 a 5.0. Grazie ancora e keep up with the good work!!
@X360SILVER
@X360SILVER 5 лет назад
Ciao, non ho capito come funziona il codice sulle linee 46,47 e 48. Tu dici che sono derivate parziali di z rispetto a w1,w2 e il bias, ma utilizzando: "point[0]" non dovebbe richiamare la variabile "point" sulla linea 32 e quindi non dovrebbe ritornare il valore del gatto in posizione zero ? Poi perché sulla linea 48 del bias l'hai inizializzato = 1 ? Spero riuscirai ad aiutarmi grazie
@CortezPro
@CortezPro 5 лет назад
Tutto chiarissimo complimenti, nei prossimi video approfondirai le reti neurali in Python?
@riccardotalarico4263
@riccardotalarico4263 5 лет назад
Grazie mille per i complimenti! Per quanto riguarda i prossimi video avevo intenzione o di approfondire l'argomento reti neurali utilizzando python insieme a keras (e quindi presentando topologie più complesse), oppure di iniziare una serie applicativa su altri argomenti inerenti il machine learning (Regressioni, K Nearest Neighbors, Macchine a Vettore di Supporto e clustering) con scikit-learn per python
@CortezPro
@CortezPro 5 лет назад
Tutti argomenti interessanti, grazie mille per la risposta e i video di qualità :D
@lemorlenny
@lemorlenny 4 года назад
I tuoi video sono davvero ottimi|, pensi di continuare?
@francescolosardo6250
@francescolosardo6250 3 года назад
Utilissimo hai qualche libro da consigliare?
@augustomassimilianocoratza8415
ciao ma quale sarebbe il codice di python, per rappresentare graficamente l'errore quadratico ?
@shrek985
@shrek985 2 месяца назад
ciao, ti volevo chiedere se si possono mettere anche 3 diversi "gatti" invece che 2
@0XAN
@0XAN 5 лет назад
hai usato la discesa del gradiente per trovare i pesi e il bias ottimi.
@giuellio75
@giuellio75 5 лет назад
grazie Riccardo, grande capacità divulgativa. Hai pubblicato qualcosa di nuovo dopo questo?
@riccardotalarico4263
@riccardotalarico4263 5 лет назад
Grazie davvero per il commento positivo! No, questo è l'ultimo video pubblicato per ora. Sto preparando una serie sul machine learning applicato che mi piacerebbe pubblicare settimanalmente ma, a causa di impegni universitari, il tutto procede un po' a rilento purtroppo. Se sei interessato iscriviti e clicca sulla campanella così riceverai una notifica non appena riuscirò a pubblicare qualcosa di nuovo :)
@giuellio75
@giuellio75 5 лет назад
@@riccardotalarico4263 "campanello" volentieri, a presto :)
@lucasantagata4551
@lucasantagata4551 4 года назад
Ciao, innanzitutto complimenti per il video. Non ho ben capito (intorno al minuto 1:55) il significato di point[0], point[1], point[2]. Il point è un gatto casuale che scelgo, ma i numeri nelle parentesi quadre cosa vogliono dire? E non mi è ben chiaro il signifcato di target. Ti ringrazio!
@ficifict
@ficifict 3 года назад
la variabile point contiene l'array coi dati del gatto scelto casualmente, i numeri all'interno della quadra della variabile point servono ad estrarre il dato specifico ad esempio, un gatto ha peso 9, lunghezza 70 e il target dovrebbe essere 0, quindi l'array point contiene point = [5, 7.0, 0], quindi point[0] = 5, point[1] = 7.0 e point [2] = 0 in poche parole sono la posizione del dato quei numeretti
@SmHeart99
@SmHeart99 5 лет назад
Scusa l'ignoranza ma questo programma mi sembra non faccia altro che dare come output un numero molto vicino a 0 quando gli diciamo che il gatto è del tipo 0 e molto vicino a 1 quando gli diciamo che il gatto è del tipo 1. Qual è la parte interessante?
@riccardotalarico4263
@riccardotalarico4263 5 лет назад
Lo scopo del programma è fare una previsione sul tipo di gatto partendo da due input (peso e lunghezza). Il tipo di gatto (0 o 1) non viene dato come input ma è solo un valore "bersaglio" usato nell'addestramento della rete. È vero che in questo caso vengono verificate le previsioni sul dataset di partenza, ma l'idea è che una volta inseriti altri due valori di peso e lunghezza (non presenti nel dataset di partenza), la rete restituisca una previsione che si basa su quanto "imparato" durante l'addestramento.
@SmHeart99
@SmHeart99 5 лет назад
Ah okay, scusami ora è chiaro
@lucavisconti1872
@lucavisconti1872 5 лет назад
grazie per i video. Quindi per addestrare la rete devo prendere in modo randomico i punti (inputs, output) dal database(nel tuo caso 10000 volte) e poco importa se i punti sono pochi e si ripeteranno spesso. Ogni volta che completo il processo ( forward + back propagation) uso un nuovo punto preso randomicamente e ho un miglioramento. Corretto? :$
@riccardotalarico4263
@riccardotalarico4263 5 лет назад
Grazie a te per il commento! È corretto! Devi comunque considerare che il dataset che ho usato, di solito, è troppo piccolo per qualsiasi applicazione reale (10 elementi sono un po' pochini) . Le reti neurali sono di fatto approssimatrici di funzioni. Questo significa che più punti si hanno nel dataset meglio è, perché avremo una sicurezza maggiore sulle previsioni. Di fatto però non c'è nessun problema se durante l'addestramento vengono presi più volte alcuni valori. Nella serie che sto per iniziare cercherò di chiarire anche alcune cose sulla formattazione dei dataset e tratterò alcuni problemi che si possono riscontrare se questa non viene eseguita correttamente.
@lucavisconti1872
@lucavisconti1872 5 лет назад
grazie per la risposta. Ho un altro dubbio: Se le reti neurali approssimano funzioni, avere una funzione di attivazione sigmoide sul neurone di output mi limita l'intervallo di valori tra cui la funzione puo variare a 0 e 1. Ovviamente, in generale una funzione continua puo assumere valori da -inf a +inf. Come faccio, quindi ad approssimare funzioni contnue?
@riccardotalarico4263
@riccardotalarico4263 5 лет назад
Ottima domanda! La funzione di attivazione sigmoide è solo una delle tante possibili. Esistono anche funzioni di attivazione lineari (che hanno quindi un range che va da -inf a +inf) o definite a tratti e ognuna ha la sua utilità in un determinato problema. Essendo quello preso in esempio un problema di classificazione binaria molto semplice, ho optato per la funzione sigmoide. Ci sono reti neurali multi strato che hanno funzioni di attivazioni diverse per ogni strato... È un mondo veramente affascinante.
@lucavisconti1872
@lucavisconti1872 5 лет назад
indubbiamente! e questi video che stai facendo sono preziosissimi per chi come me si sta avvicinando alle reti neurali per la prima volta. chiari e pratici. Forse puoi consigliarmi anche un buon testo per approfondire alcuni argomenti. Il mio scopo sara' quello di costruire una semplice rete (input, 1 hidden e output) per fare interpolazioni usando un database. Mi chiedo anche se tale rete sia piu accurata della classica regressione (lineare o non) che si studia in statistica
@riccardotalarico4263
@riccardotalarico4263 5 лет назад
In media le reti neurali sono molto più performanti rispetto ad altri metodi statistici ma solo a patto di avere una quantità di dati considerevole (centinaia di migliaia di valori). Per quanto riguarda un testo da consigliarti sinceramente non saprei. Quello che ho imparato e che sto imparando tutt'ora l'ho imparato su Internet. Mi trovo meglio con un approccio top-down : penso ad un progetto e apprendo le cose che mi servono per arrivare al risultato volta per volta. Il mio consiglio è di provare a fare una ricerca, vedere se qualcuno ha pensato a qualcosa di simile e partire da lì
@Abdaado
@Abdaado 5 лет назад
Continuerai a farne altri?
@CamminareSulleAcque
@CamminareSulleAcque 5 лет назад
Ciao, anzitutto complimenti per i tutorial sei bravissimo: ho seguito passo passo li script python però mi stampa un array di solo "sabbia", potresti aiutarmi? import math as mt import random as rd rd.seed(1) def RN(m1,m2): t= m1*w1+m2*w2+b return sigmoide(t) def sigmoide(t): return 1/(1+mt.exp(-t)) #mt.exp(-t) = e^(-t) dataset=[[9,7.0,0],[2,5.0,1],[3.2,4.94,1],[9.1,7.46,0],[1.6,4.83,1],[8.4,7.46,0],[8,7.28,0],[3.1,4.58,1],[6.3,9.14,0],[3.4,5.36,1]] def sigmoide_p(t): return sigmoide(t)*(1-sigmoide(t)) def train(): w1=rd.random() w2=rd.random() b=rd.random() iterazioni= 10000 learing_rate = 0.1 for i in range(iterazioni): ri = rd.randint(0,len(dataset)-1) point= dataset[ri] z=point[0] * w1 + point[1] * w2 + b pred=sigmoide(z) target = point[2] cost=(pred - target)**2 dcost_dpred = 2*(pred - target) dpred_dz = sigmoide_p(z) dz_dw1=point[0] dz_dw2=point[1] dz_db=1 dcost_dz=dcost_dpred * dpred_dz dcost_dw1=dcost_dz * dz_dw1 dcost_dw2=dcost_dz * dz_dw2 dcost_db=dcost_dz * dz_db w1= w1 - learing_rate * dcost_dw1 w2 = w2 - learing_rate * dcost_dw2 b = b - learing_rate * dcost_db return w1, w2, b w1, w2, b=train() pred=[] for gatto in dataset: z= w1 * gatto[0] + w2 * gatto[1] + b predction = sigmoide(z) if predction
@riccardotalarico4263
@riccardotalarico4263 5 лет назад
Ciao! Grazie mille per i complimenti. Ho guardato il tuo codice e c'è un problema di indentazione quando hai scritto "return w1,w2,b" basta cancellare uno spazio davanti alla riga e tutto dovrebbe funzionare: for i in range(iterazioni): ri = rd.randint(0,len(dataset)-1) point= dataset[ri] z=point[0] * w1 + point[1] * w2 + b pred=sigmoide(z) target = point[2] cost=(pred - target)**2 dcost_dpred = 2*(pred - target) dpred_dz = sigmoide_p(z) dz_dw1=point[0] dz_dw2=point[1] dz_db=1 dcost_dz=dcost_dpred * dpred_dz dcost_dw1=dcost_dz * dz_dw1 dcost_dw2=dcost_dz * dz_dw2 dcost_db=dcost_dz * dz_db w1= w1 - learing_rate * dcost_dw1 w2 = w2 - learing_rate * dcost_dw2 b = b - learing_rate * dcost_db return w1, w2, b
@CamminareSulleAcque
@CamminareSulleAcque 5 лет назад
@@riccardotalarico4263 carissimo grazie, ma l'errore era un "tab" in più al return, stava sotto il ciclo for.. ti ringrazio
@daniellachiche270
@daniellachiche270 2 года назад
Non è tanto carino sparire senza spiegazioni ...