Veramente interessanti e ben fatti, spero presto tu possa fare i video di approfondimento. Molto utili i riferimenti agli strumenti presenti in rete !!! Grazieee !!
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 ...
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
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.
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
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!
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 :)
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
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
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!
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
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!!
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
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? :$
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.
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?
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.
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
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ì
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?
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.
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?
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
È la prima volta che mi sento in obbligo di commentare un video. Ottima presentazione, semplice, piacevole, pratica. Grazie mille
I video sono fatti veramente bene e spiegati in modo molto comprensibile. Abbiamo bisogno del seguito!
lo so che arrivo dopo anni, ma ti ho adorato dal primo fino all'ultimo video. Chiaro, preciso e divertente
la scopro solo ora questa serie peccato sia finita. Complimenti per il modo di insegnare.
Complimenti , fatto molto bene e con la giusta ironia per tener svegli i più distratti :)
Complimenti per la serie di video che hai realizzato. La migliore che ho trovato sul tema
Arrivo in ritardo, ma devo complimentarmi, con l'augurio di trovare videolezioni di pari valore.
Ti prego continua! Mi sta intrigando moltissimo!
Ottima serie di video, super chiari ed approfonditi al punto giusto. Complimenti!
Veramente interessanti e ben fatti, spero presto tu possa fare i video di approfondimento. Molto utili i riferimenti agli strumenti presenti in rete !!! Grazieee !!
Grazie mille! Attualmente è in programma una serie sul machine learning applicato usando scikit-learn
Mi sono perso il tuo video precedente., ma comunque sono felice che tu sia tornato su yt: continua così😁 spieghi molto bene
Grazie davvero per il supporto!
@@riccardotalarico4263 non c'è di che, te lo meriti
Studio giurisprudenza ma riesco comunque a capire tutti i video. Spieghi benissimo! Mi raccomando continua a farli!
Sei un grande. Semplice, chiaro, ottimi esempi.
Complimenti per i video, davvero ottima spiegazione!!
Grande davvero bel video
Sarebbe bello se ne facessi altri
Ottimi video, davvero complimenti! A quando altri?
secondo me sei davvero bravo a spiegare. ti prego continua
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 ...
Torna per favore, sei il migliore
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
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.
Ottimi video, davvero complimenti!
Hai fatto un bel lavoro, complimenti
Bellissimo e interessantissimo video!
SEI UN GRANDE
molto molto molto bravo
È davvero un piacere seguire queste lezioni, quando farai uscire altro?
Grazie mille molto interessante!
Complimenti
Tutto chiarissimo complimenti, nei prossimi video approfondirai le reti neurali in Python?
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
Tutti argomenti interessanti, grazie mille per la risposta e i video di qualità :D
che figata
Vogliamo la prossima
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!
grande! davvero bravo! spiegazione ottima! Posso farti una domanda? Qualsiasi tipo di intelligenza artificiale ha come base le reti neurali?
grazie
grazie Riccardo, grande capacità divulgativa. Hai pubblicato qualcosa di nuovo dopo questo?
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 :)
@@riccardotalarico4263 "campanello" volentieri, a presto :)
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
Grazie per il feedback positivo!
Riccardo dove sei??? Ci manchi
ciao ma quale sarebbe il codice di python, per rappresentare graficamente l'errore quadratico ?
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
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!
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
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!!
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
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? :$
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.
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?
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.
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
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ì
ciao, ti volevo chiedere se si possono mettere anche 3 diversi "gatti" invece che 2
Utilissimo hai qualche libro da consigliare?
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?
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.
Ah okay, scusami ora è chiaro
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?
Ti prego continua i video
hai usato la discesa del gradiente per trovare i pesi e il bias ottimi.
I tuoi video sono davvero ottimi|, pensi di continuare?
Continuerai a farne altri?
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
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
@@riccardotalarico4263 carissimo grazie, ma l'errore era un "tab" in più al return, stava sotto il ciclo for.. ti ringrazio
Non è tanto carino sparire senza spiegazioni ...