Тёмный
No video :(

Rete Neurale Feed-Forward in C# DA ZERO 

WiLLyRS
Подписаться 1,8 тыс.
Просмотров 2,6 тыс.
50% 1

In questo video scriveremo una rete neurale in c#, completamente da zero senza usare nessuna libreria già pronta.
Questa rete neurale riceverà come input dei caratteri numerici scritti a mano, presi dal database MNIST (en.wikipedia.o...) e cercherà di capire quale numero c'è scritto!
Il video è un po' lunghetto, ma faccio vedere per benino tutto il codice con considerazioni sul risultato ottenuto :)
Link al codice: drive.google.c...
Potrei fare un altro video da 18 minuti con tutti gli errori che ho fatto cercando di dire "convoluzionale"
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
Se ti piace questo video, commenta e condividi, ma soprattutto iscriviti perché seguiranno altri video su reti neurali sempre più potenti ed elaborate!
Per qualsiasi domanda, chiedete pure nei commenti :)
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
Video che consiglio di vedere prima di questo:
Introduzione alla IA: • Cos'è l'Intelligenza A...
Cos'è una rete neurale?: • Cos'è una RETE NEURALE?
La backpropagation: • La Backpropagation (Ad...
Ma ci sono anche altri video su altri tipi di IA che ti aspettano, nella mia playlist sull'intelligenza artificiale: • Intelligenza Artificia...
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
Hai voglia di qualcosa di più soft? Allora ecco i miei video dedicati alla stampa 3d: • Stampa 3D

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

 

21 авг 2024

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 19   
@riccardosaruis7191
@riccardosaruis7191 2 года назад
Ciao, complimenti per gli interessanti video. Una curiosità, come mai utilizzi C# e non Python, dato che quest'ultimo è sicuramente il linguaggio più usato in ambito AI?
@WiLLyRS89
@WiLLyRS89 2 года назад
ciao, grazie! :D Uso c# perché come vedrai negli altri video, poi uso gli algoritmi sviluppati con unity3d, inoltre python è usatissimo perché ha gli algoritmi che sto implementando a mano già fatti, sono molto più ferrato in c# e per scriverli da zero va bene qualsiasi cosa
@riccardosaruis7191
@riccardosaruis7191 2 года назад
@@WiLLyRS89 nel caso interessi il mondo AI si fa tutto in Python, a parer mio sarebbe bene imparare direttamente questo linguaggio, qualcosa si fa anche in R, Scala ma è marginale. Per rendere molto più veloce il codice, alcune librerie Phyton girano su C++
@WiLLyRS89
@WiLLyRS89 2 года назад
@@riccardosaruis7191 sisi, conosco python e so che si usa quello, ma al momento non ho interessi lavorativi ma solo di ricerca (in particolare ai per videogame), quindi usare librerie già pronte (che sono difficilmente integrabili in unity che è quello che uso) non ha molto senso :) Sicuramente se cambierò obiettivo passerò a python!
@umbertoperoni7219
@umbertoperoni7219 2 года назад
Ciao, ho una perplessità... Ho tradotto il tuo codice in java (il linguaggio in cui sono più ferrato), e funziona tutto. Tranne il fatto che da una generazione alla successiva il numero di errori cala pochissimo, solo qualche centinaio per volta. Ho controllato e ricontrollato, ma sembra tutto in ordine. Sai per caso quali circostanze possono produrre questo comportamento? L'unica che mi viene in mente è il LearningRate, ma non sembra impattare molto nelle prestazioni. Grazie! Umberto
@WiLLyRS89
@WiLLyRS89 2 года назад
Ciao! Si, l'unica cosa che potrebbe rallentare l'apprendimento è il learning rate oppure una diversa loss function, perché per il resto è molto basilare (nel senso che non ha molti iper parametri). Ma alla lunga impara e ci mette solo piu tempo, oppure si incastra?
@umbertoperoni7219
@umbertoperoni7219 2 года назад
@@WiLLyRS89 il problema è che impiega un paio di minuti per ogni generazione di 60000 campioni... per convergere converge, ma devo lasciarlo correre tutta la notte. ho dovuto implementare un sistema di salvataggio e caricamento per poter interrompere e riprendere il training in un secondo momento... 🤦‍♂
@WiLLyRS89
@WiLLyRS89 2 года назад
@@umbertoperoni7219 forse allora è solo un problema di ottimizzazione.. se vedi in c# uso i dictionary e cacho tutto il cachabile! È impossibile dire qual è il collo di bottiglia senza profilare il codice.. se riesci a farlo sicuramente ti evidenzia i punti dove è più lento e puoi guadagnare tempo!
@umbertoperoni7219
@umbertoperoni7219 2 года назад
@@WiLLyRS89 Ala fine l'ho rifatto in toto partendo da zero... adesso funziona! ✌
@WiLLyRS89
@WiLLyRS89 2 года назад
@@umbertoperoni7219 grande! Chissà il problema qual era :D
@radamantistube
@radamantistube 2 года назад
Molto bello, unica cosa che non ho capito è : come fai ad arrivare a questo Math.SigmoidDerivative(GetOutput()) * (expected - GetOutput()), dovrebbe essere il calcolo di f'(z_l)*2(A_l-y). (expected - GetOutput() != 2(A_l-y)... mi sto perdendo qualcosa
@WiLLyRS89
@WiLLyRS89 2 года назад
Uhm, sì, la formula che ho usato per l'errore sembra non combaciare con quella che mostro nel video sulla backpropagation (non me lo sono riguardato ora), però la funzione per calcolare il costo è completamente arbitraria, l'importante è che sia una funzione che dipende dalla differenza tra output e valore atteso
@radamantistube
@radamantistube 2 года назад
@@WiLLyRS89 Perfetto!! Grazie mille!, mi stavo intrippando :D Bei video, davvero
@AndreaHetfield
@AndreaHetfield 2 года назад
Ciao! Sto provando a creare la mia feed forward neural network ma alcune cose non mi sono ancora chiare. Quanto è grande il tuo hidden layer? Perché proprio quella grandezza?
@WiLLyRS89
@WiLLyRS89 2 года назад
Dipende dal numero di input/output che hai. In genere gli hidden sono circa 2/3 input + output, ma potresti anche aver bisogno di più hidden layer.. si può solo provare e vedere se funziona!
@AndreaHetfield
@AndreaHetfield 2 года назад
@@WiLLyRS89 Innanzitutto grazie. Davvero. Sia per i video, sia per portare così concretamente lo sviluppo di una rete neurale agli utenti. Sto ricostruendo in JavaScript il tuo stesso esempio, quindi sto sfruttando, se ho capito bene, una rete con 28*28 neuroni in input (uno per ogni "pixel" del formato MNIST). Se ho ancora capito bene, essendo un feedforward, devo collegare necessariamente ogni neurone di input all'hidden layer e ogni neurone di hidden layer all'output, per definizione. Non so nel tuo caso quanti neuroni nell'hidden hai messo, ma rifacendomi al tuo commento dovrebbero essere 784*2/3 circa, quindi 520 nell'hidden layer.
@WiLLyRS89
@WiLLyRS89 2 года назад
@@AndreaHetfield figurati :) Nel caso della MNIST che vedi nel codice in realtà è molto diverso (come vedi subito la "regola" è stata smentita :D). Se scarichi il codice in descrizione puoi vedere tutto il procedimento nel file BackPropagation.cs, ho usato un solo hidden layer con 56 neuroni ed è stato sufficiente! In questo caso la regolina non funziona perché é molto sbilanciato (784 input e 10 output)
@0XAN
@0XAN 3 года назад
bell'esempio, dallo stile direi che anche tu come me sei arrivato a C# passando per C++. Comunque il layer dovrebbe essere un int o un long, non un float probabilmente.
@WiLLyRS89
@WiLLyRS89 3 года назад
grazie mille! hai ragione, sia per il c++ che per il float, mi è scappato :D