From 7ba92b7a6dfd059fc3493ac7459a5c467105f16b Mon Sep 17 00:00:00 2001 From: mirimatcode Date: Sat, 22 Feb 2025 20:04:07 +0100 Subject: [PATCH] settata topologia deep feed forward --- classificatore_singolo | Bin 21504 -> 21504 bytes classificatore_singolo.c | 7 ++++++- percettroni.h | 20 +++++++++++++++++++- visualizzatore | Bin 26752 -> 22608 bytes 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/classificatore_singolo b/classificatore_singolo index 78ec9e8286cf2755decddee9819af651041d4808..43dd1e028b2a2220611ce533959606d7fa1b66fe 100755 GIT binary patch delta 1802 zcmaJ>YfKbZ6rMB7%5DV~6a^I7U69u*Q3MQVR0Iab2aQxVXhkvF&=8+7C6Ppgc8hU3 zqS0e(t=b6%uJby*)Q7}8i{ZPcZ%w%9@NMYXKY>A5o$Nt*QjxZlh@=ljk% z_nvzjk3!>7Xfc7gW&)>;8g~@zg|w*T&ccOs%@8?=VhT&{8aP?LPW`@?0TlEq9g=pQ4$oN;Af&ealmn|dOue?Pj z_mQgV#T~+9)(K$6izLv6VYd0O2P}wtR(UNLhNICrQcy zUHO7$^eHM?v?l49$a9=0l5OAu-FsLbCkMTM#$0`ud&m6~GWg#f%M{3krJ8_+s;B6JbDEJ^Lod*i+o~!%`>0p6lD`>lyXMZ% zIL3cBbqC+j|A(qxp+Ng6%wxje2%{3nku4^dw&AvDu{+RWDJ>K`P0lkl{G05_XWa8Sl~eM;Jcc3J2X8({F@ArQ1Av zzyK)-1u@WuaRpUzd+4cQBTWbHHsL7V!d2q#f+-M0Z$Sz4qPegHW?)(21GtHEi%Os! zrJ}01I;&37YNXH4X`4oI5nLgH5ED0w-at04>A-anGV40b6k?zb=Lrq47CVFr_yq06 nG0=^9#k=U(JBq8I%$;5`V1j38Uo^#BNq2~iO83%5Um5-Z&w9{+ delta 1723 zcmY*ZeNa?Y6o2O}E4w4RZx=CG`Pf}P6jltCk4a4v^ug1xwAc~ygK-M7bka)9EQDGy zUr)wqj!os5HO*K!rj~2QFpRL3?xNV3eCm_gfYz&zKI^ocUyFu+`LNgM-1h zozF$pmCLoQa!s@B->-gKzeCdpzK8D&uoixDPz%?un@E%dba2|h7G ziw;`MY3&mhhx!Dkcznpx+$T89-H9AG#GE1K1o`@jar&Ex7LQAcNaniCNVO!q(ysnS z2lfdSB9Yncve-!n2UM6OMrxwNVke!;DSk3Ws}T9_ZAT-LQ42}uJiA%`u2s6L@Q!fFzu zuNQ|pe)LOnH>=qIGxxig%R=^1Ar371A8A{O^AZ-p+Th-VWxTMu-?)~x`UJ{+DP|=u z;A8r6L*hv&2rfv9;rV$J(c_+gTT@2x!zbe2lohZQ-R?pt$0hEZ@e7=+aHrS}n{Vq< zsuZYIxf&N$wNNL+>RZILv5KqTV!JyTa`6HQ+(wUQHhhW8JYHCjjh$XirNIzVA)6E*ta=;2!Uj5XQUS6j+0<)FkUUyWSz{pExbG?2$)r=^6vdbce1% zT@Y5UVG}u)4m!So$5J!hM{gRAQsWxE6(l*-!YXml!b07RacQ}*6Qwkt_ZE4Q$cy@h zk>%s)IK@1Rfl=Pmh-pt)F5F;x<{tbtEp_;G(rAlfLT4~KeR9DHMmCyzV~kK8^cik= z{9jEY7fxyToK||bYlef-?MLv9^kjSg!=}&hi}drn^E$qh;fEGHol)XWWxUd`ktC{x zp(mDn-RMYLOmOOG3&87GJmwv^9gK{z@=%8-vP$i1qxD#t>2^4EBxd_Y!Mj-E%Y-Gk z(pPNf2Wb|dT8lsVO6@Jfj2(Kvq+!a~D%gSR$7aGw+kUd3LTf5zPG39t>TvJd$V zPzCP4UF#)HQ~WpRdi6{XKFr+=mW}(G$96t$-}p^@-G$4Vc9KpBbZgpQghvSDD9)>d zd4$d@npQ?wK)8xer{49G0H~LCnZcqXNy!cf)LaiRSYt)0~An zX|BNzV&BA@v|f$20yk_7jw?794N}lL?T!gz5sKnrAG(SvUF+z_z(%G4+(p7zUf?AB zpeP3}W2mSEPNQ{335>>hGkV}C7S1ez{V30@bXB>HP0Lx1G`3TjVmUjPgCNGc?$KY0 zjk5-D=Ls2GffK}dsKQxd9sOlG#QD@R-r{)p1t%46rXNN}aV1O*W|iErz!mh)&9O@K NO4yKs6?4Bb{RiZYpgRBn diff --git a/classificatore_singolo.c b/classificatore_singolo.c index 9c83241..333ea7a 100644 --- a/classificatore_singolo.c +++ b/classificatore_singolo.c @@ -4,7 +4,7 @@ // Scelgo quale categoria voglio identificare. nel caso dello xor -1 #define CATEGORIA 7 #define NUM_LAYERS 4 -#define PERCETTRONI_LAYER_0 64 +#define PERCETTRONI_LAYER_0 32 #define MAX_EPOCHE 100 //1 relu, 2 sigmoide @@ -80,6 +80,8 @@ void main() errore_totale += pow(gradiente_errore, 2) * 0.5; + + // Derivata funzione attivazione double derivata_funzione_out = derivata_sigmoide(funzioni_attivazione[NUM_LAYERS - 1][0]); // if (derivata_funzione_out == 0.0) derivata_funzione_out = 1; @@ -87,7 +89,10 @@ void main() // Gradiente del percettrone output gradienti[NUM_LAYERS - 1][0] = gradiente_errore * derivata_funzione_out; + //Crasha nella discesa del gradiente all'immagine indice 16 quando metto troppi percettroni discesa_gradiente(rete_neurale, funzioni_attivazione, gradienti, TIPO_FUNZIONE); + + // A questo punto ho tutti i gradienti dei percettroni, non mi resta che trovare i gradienti dei pesi e correggerli diff --git a/percettroni.h b/percettroni.h index e5e9350..450355f 100644 --- a/percettroni.h +++ b/percettroni.h @@ -108,7 +108,7 @@ ReteNeurale inizializza_rete_neurale(int numero_layers, int numero_percettroni_i r.size = numero_layers; // Funzione esponenziale inversa layer 5 - for (int livello = 0; livello < numero_layers; livello++) + /* for (int livello = 0; livello < numero_layers; livello++) { double esponente = (double)livello / (double)numero_layers; double frazione = (double)1 / (double)numero_percettroni_iniziali; @@ -124,6 +124,24 @@ ReteNeurale inizializza_rete_neurale(int numero_layers, int numero_percettroni_i r.layers[livello] = inizializza_layer(numero_percettroni_livello, numero_input); else r.layers[livello] = inizializza_layer(numero_percettroni_livello, r.layers[livello - 1].size); + } */ + + for (int livello = 0; livello < numero_layers; livello++) + { + if (livello == 0) { + printf("Layer %d -> percettroni: %d\n", livello, numero_percettroni_iniziali); + r.layers[livello] = inizializza_layer(numero_percettroni_iniziali, numero_input); + } + + else if(livello < numero_layers -1) { + printf("Layer %d -> percettroni: %d\n", livello, numero_percettroni_iniziali*2); + r.layers[livello] = inizializza_layer(numero_percettroni_iniziali * 2, r.layers[livello - 1].size); + } + + else { + printf("Layer %d -> percettroni: %d\n", livello, 1); + r.layers[livello] = inizializza_layer(1, r.layers[livello - 1].size); + } } return r; diff --git a/visualizzatore b/visualizzatore index ba15974ffab9f4e8398ddc1aa000f5ae37017068..1e5dfca41dc7e14cbc4d8471267f10f62b85bd82 100755 GIT binary patch delta 6462 zcmZ8m3s_WD9zSPb5Kx>M1q3u^P~@TFJP-yl71Y7&0|gaB$^aiI`N&KZ+hs>X+s2z^ z{Wn+r+RD}XTy0Yq*N@sy1@!~;>mgRIwNyi;ULPe9Dw%fof9^dOZgcqN{LcCPALsQy z=bn4n*hB>jh?)u2c=DCOsr@?0gaQSw)m{4+(`mzBLA z;g~EWmgE#-0aK_7QAxT>moX{Q-V{Q28KITnH0Gi|gJ9 z%`|u^PJ7_rWn2jsMmGHUUfF?b5=6obSiwZGEOR-lA64W=5{YtV6IodqK}ayM@_JQV zWf&m_lFIG1nBar<65BxLhLFQNu(a7Y&%-}7VANXO7QmZ%ET;tU@tk)A@M9Go=d6B~ z+5r}N$_`Siq(R5yka|*!j^~?Ek)7A^mL6?FF6nqaCPnIJJXBKa*lcJiMaQ$owdBz8TD&k>mX61$>q$8}KD>t|L@3~UhB@!6 z6BOtS`sw&$9p7Kam+5%3j$fwZd7LZK)f&&*kJK4dYXan=bo@pgAFbnG(D8$G{B|85 zqvLn#_*mrm_z8JSC*Y3?#caQhAFOk9SjP|1@%1|XAsyeKHJ;JdswLJ-GAqpBR`M@m{G%W{*^59VPLyel8bvf%Sb zCoQ=tyZ zc5{T6I3BJVQ1TJei>I5>dtOZ)V(4;1eCp#gsqPP{%MGSeUFuq$+=wR9QMf(w zF8>(RPn)mQY2l|$Bs&uE;mLXy4y9wFy?fJG zEovVF(fFET*enh0J!!g06|>sQtxn&-9e5C%WFr;C0_-W;8)v9)@)b91s+y(Po9cA1 zas-y880@D_pSC{Z>xRE&_^aS1tkv<77cN$HFGItJL27BCty`xYd7Tp)Cx^sQMFh_l_ z$?^xR-4iTRCm|WT?~^{Oh^t}X^TaQJH4L}Mvx)%qzu zbT^2`b9h0<$AV})0^74HqYp{4+^cW%)!f8c8UUv3sL=0GbB1WV45P9I`Yu#uC(`w> zJA0C~_YrThPA24MQ~W(Niby8Jc}E_8d~Zi~$g4TS-A>2yw91v`OP4$|x^i)KdRo=O z4QrQ>m8&YBS!-X*ge%GyE?J=nom{wPAt7~-=TuYgYQHRp;&!TR$1x$gzmw%VsYT#P}SgE$wl25~Lo-x2?Ucn;!vE-&k%n_ z>_QC1?GY11W|NCp$ijg1;npoiyp5+_HDYR zjQq*?T*yKU#s^F>q66NZI1-QA)`^3u8Ge{J49`N#BrC;t=t)+??RJ;r1hL(~=4B=vN8?Z7E6ne~1I+KjLzArrdKtz~ zj;A58V6v6=hZ@ZD;BT1AaD4JGDnUDzcL4QRF?kpmz%e=k5_wb)m~GX50==wGfP_iRzRJ- zJG0bJg`V#<5xgGEU&z?yoF(mjS-X3)^BGfLqFvGt=YwnJXqpA(Gp#fOHqCUH`3onm zvznlBrqyzZx5%!$ETzCtGbhj%aL%&QRZuuCyoKIb#|W19ALH?wVC)1w#Sn8rnUpijNf4e!@l z4q-f+wZyB;$6S!i`Oe|+<(xe4e|Qi_;KpKU1Bxv;rmBj3YC<}=FHHabfiK_(P%?( zDr_wp9Y^@oaV1iNTCCHKLby=ssXuySQ*kH;T=Pc9dH4`s=jK=Vx|~jeXXn{t z16C~*C&prkAz6iRYMvc?**S0YG%XCZ4oqfBxa1uHYdRfy)^aI-nFVf8%=x>K@Z_U; z-l;Z~SB_pR?&IQte69KULk@BNTYk`d!QGujo;9z1Me=g~S47tQIPOP#rT$3q!<7gD zd$GlJ1|QWdX<_#(>X^}IPQYCEQKCDB#1z7s;yl+I{L6>db@sqvUGZ}>Z6V9Bz}z`z z!}a1k!@m>2HUA}7R)F&k)M6dp$~#=lqsCxVy^`6`Ie)ydE63rm{YAaIH3ep1-r49uh#aDgD-n)hsQx&MUSk09F$;< zpMmugV0VREdp=40M2&&=3VV3ZKFfu;rS34kSXsGHvUI!wVfWJUVa2&>i)eu=tEZ{8 QJV;pPHXNG;CCifj53Z2CoB#j- delta 6491 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