From 4df6aa7150688446133a3c213aa74c1a51f0372f Mon Sep 17 00:00:00 2001 From: chabisik Date: Sat, 27 Nov 2021 23:34:10 +0100 Subject: [PATCH] Updating/Adding functions --- Makefile | 13 +++++++++++ activations.c | 5 +++-- activations.h | 2 +- activations.o | Bin 0 -> 1920 bytes exe | Bin 8872 -> 0 bytes main.c | 9 +++++++- main.o | Bin 0 -> 2104 bytes myprogram | Bin 0 -> 13240 bytes network.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++--- network.h | 11 +++++---- network.o | Bin 0 -> 2456 bytes neurons.c | 12 +++++++++- neurons.h | 4 +++- neurons.o | Bin 0 -> 2368 bytes randomness.o | Bin 0 -> 1808 bytes training.c | 7 ++++++ training.h | 6 +++++ training.o | Bin 0 -> 944 bytes 18 files changed, 117 insertions(+), 13 deletions(-) create mode 100644 activations.o delete mode 100755 exe create mode 100644 main.o create mode 100755 myprogram create mode 100644 network.o create mode 100644 neurons.o create mode 100644 randomness.o create mode 100644 training.o diff --git a/Makefile b/Makefile index 82c0aaf..df79039 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,16 @@ +default : myprogram + +all : myprogram + +clean : + rm *.o myprogram + +myprogram : main.o activations.o randomness.o training.o network.o neurons.o + gcc -Wall $^ -o myprogram -lm + +%.o : %.c + gcc -Wall $< -c + send : git add . git commit diff --git a/activations.c b/activations.c index 91503ab..254ec63 100644 --- a/activations.c +++ b/activations.c @@ -1,13 +1,14 @@ #include #include #include +#include "activations.h" float sigmoid(float weighted_sum) { - return 1.0 / (1 + exp(-(float)weighted_sum)); + return 1.0 / (1 + exp(-weighted_sum)); } float sigmoid_derivative(float output) { - return 1.0; + return sigmoid(output) * (1 - sigmoid(output)); } \ No newline at end of file diff --git a/activations.h b/activations.h index 4780681..2be3aed 100644 --- a/activations.h +++ b/activations.h @@ -2,6 +2,6 @@ #define ACTIVATIONS_H float sigmoid(float weighted_sum); -float sigmoid_derivative(float output) +float sigmoid_derivative(float output); #endif \ No newline at end of file diff --git a/activations.o b/activations.o new file mode 100644 index 0000000000000000000000000000000000000000..0416b71df5916055d8a01bf5edf32c10d9247d1d GIT binary patch literal 1920 zcmbW1J8#oa6o8N8((*`fiVz@`A!4WkYOF+nC>5f4;3Pw!QfbsuAuK0xX#`17>{Oux zL_#1{EDZdJ{shKWUD}<2kp+o?0g?_GB9(LOd&9+Xm!8P?oco=ZeII$N6|wTNY1yV-JPi8qN^HGb>5OEK#r%ak@3L28Gkso=!v zPqcEhX7>!`H75` z{6q$4qefgZOpGuBGT;aKhz#Q+R6%kLfz$i&a~Baf_2!af1~Gd0I)Q4v zuGvNjwcT{}I=7nUOGCBIwhd~wa<-!Bjfy-V>BWM)KKJ!_oWSG=(18qvSAx8SE--v*}sXl*>=>6~?C- z_uibZ%w{F!^8RebDc&% zx5dzDKj;&?%$WE6qbz?#EQ&T?e~uT?@Y}y_wxImGX#Xge=kxueHs0Qdpu_slGEH}w k?wL2An0N0G!53Ea0Zjy9<%VPuEx-J43>w2o*YM{51*3wy2><{9 literal 0 HcmV?d00001 diff --git a/exe b/exe deleted file mode 100755 index 8a3772dc9e19f3ba2a72943b81fabbca361e5df8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8872 zcmdT}du&_P89$EuNK0e8P@t5KdZm@xqPk7#BhYrlX`J3v>0@nL9(`P#_&V|MquAGw zbZeI>(BXx$Okz_vF|E=z1bb-gA=XVuBnxV(hEUivHbKw=Dx1SYlm%EArQYv5_k8yC zjWd|Ee|Dnl?|i@SalZ3@!3F1a)SV+ARbY816AoZe7%);+y#6m%8 z(n#GQl_r#Hrqv2}gOXicl?6EILZ!!)BP2Rq$tscIITp%P2)_i#j$(bFMzWxO znJH2gN57(MM=aT$RCXto9n%XcFs58TsvCW+%Ab=qLPm)x=~CMDx*4JT!?PtjiN-Bh zFlD>X!%lUX()iEBr^LHec~iAZmx`aMs;*cSkF~8|yDA=88IL8iT`Rll)~{T@HjqgL z*2sF3f70E$W3McU`kR}UVxEVOFp^JPzwe_JkN$f0$QSS2JpRJZo}ZmR^Elb^hwP_L z+n{-Q1?~O7{1x!Iz$)p}aIb{dO@UuF1%5AZKR#!=3P2_Qi>JVk1NY-|rsV+0#+l{- zsN`Ru-`c60){9I!oQ#OWSu-QdSi%s8)3Kx(6^U>>o@y7m-rg0~qp@T-9y?-yB||-9 zhSR2=2*;8lnl=ovwWYaXi@qkXCa_NE&8^$@h>6taGE!qp0MG( z7Le?;4Y#ig12&xNO#08-a5QK!4cl-UQ=GKkx2msNW>wTtrNEFuH z45+Yl6Mnsm>X9S9lg!3O3rI`X5KmPb84EEs{V*rRJG<{VKf@>F1k z^o2&WliJ{Dm6ki3_es6qNrjy6Z0NiUa<%09MBm=?TKgZg!Ply^6AOJ5`BRX~$bSl7 zQSY&VoVyoBeWCLkLnFtYC6#Zp%GWFv={&a!LphWu({btgzx$o)g%$}?_Vqw`mHv4nmpx~KnT1BgqsWAP<-ejezs5K zuZLvZy8;pUYW@z3aqpo)?=q@HXky%ZfYfdu9QWQ9x_EA=H2nI5w+8n$=l&er8^l;& z`lwqD<&{MD1aluZ=RRmzPNSe&8~oUv-+-vJ``CHn@=?fnOX2Z9HKhl2W0f2qLnAv6p5le3@JtSZrvN`4`gP5TYg-xf2H_ZZ2n zf8%noG-7u8JB*}}4x2{AAC0HN5&vfY(x|mA_S_-_ePXBUTKC3IWN5v4>Z3y8SD>2^ z>Ii5HD9yZmXrA{#p9GzUP8|YW3;H~0E9eg}cDg`c0(}JZAD}coHen`=fc^w@2?jKs zLnyh9>=v#rpX=H=GpqYuGkt{9*>eEp-#`i~Rn`|`3FPvu3jH3^_4t}R^S5~~ySKVW z+_GTfiW`?KCYbCoEyZont0q7tvOR$B4%F{X!h#;(@v1E~GphC@BFp!e0DlK^c@$;2 zCdIPsMw{F>Tvwzv%wrtYO`ZomD1y--TF)O*+W3_dG)oYhq=qLFjxf{Dd9e1?N zz>PhE@5442`fg!X)Sp%ym*x7?1&_yae1_n0TaM2Z+@Ixmwcv43j?WUqs{hOJ*@DMq zIewYo`B{$75xXk%i(Ax);flDY`2JGv$6K85<+xAm;t6RJxW(M!`+*HcE8}L!6V@hh ziz|xvCmRg?dBt_39KRCpB7Qq0^KNlfah}_SZh={??px*feBrBz^QuC! z6#w_8z#pFi|K$|;RP8eWeHZ%uIo?RXbE*{2^HO-lq<;S^a2Hm0XTRr_KJP#5`y-i| zJPthw)Ky`e(AnW~^y95+;pSmltMGa?&Uu*#N}Nk8(LKQZCAOG*MdFjkVQLCLUy-;+ z99J8RJk!A2L%@9)&(3kXQR+{gr{A2yKRt9+dZ&4I3jAf@RIYO#<$+hK?>~Xht-4z9 z`pyk84GlOKo_O8hW$p^#)c$R%{pDE^MvElQ)+Ji2^oLdZ$TJ8e$$nz>>w11EvXTS6){WsJ)aHsNfKX7Uvr~Ws9 z`<0HJ{8;(frrL+kVZQ~w*siGZ8>Rl_ec_y}R|SLiw3#up(P*Gul-|;GGoiQBYgz^` zX_1uP5l^*+<9ftQr89as+a=mliNkRN*Q&sV^*7a3R-(tem>y22!`-@(G}GO9!V4!1 zJ(5i%x?y7DbZDAos`TWCkdlUZZz_G4%w^N5WCl5UMoc9T8!@`xv^%&xq=$Ai>UifX zcN7tN@>#OJ{?ooo((7lrwpAOQZl|WujY!xGtC!Joy-5$E* zb9i(%(uYMLnKF$)u%UUS8SYSAM=~2|%f|3ehFC-di0cezIz=GTorFJ&nrTaNkCD#A z&_Ys8F*;;vBOWFLl{*|aML;%G0NFrC3an{#;g@Cylv1+C14gHs51kP>Va_tOCWd9f zd6W=N#M%)P4VVBLR0J?76PRcfCi#C4(R~g}2F^HE;&U}qzRxMK)a5+U>+#Xj$M$^w zX6lE`o_IfCtQHx&J)hH=E@4GQo%W5uKfoP|%Ri|yOgVnOcdF&J=yeBjbQWOy(<;NX zjv5Dvwh79zJ?}63fYIHJ?fHJd^b}e!tp9z=zCr2n{e|gcHv6lPciKM$jM_wP!^L|J z-*<2#DN8E6B9=qWZqN52raeVXE5rZaVfwJcp6^XeIbL?dJk#$w?D;&ww9Rp`=W^NK z_Z{~9?!r_ZLs(t*RgppFab?f_$LB7ljdo?^o$dE?hrRRv!|_kBf7)SRy#J{K_ON5X zbGxzIbI8zLikpeg`TT!lr#|yc{{&mF&7R+(`qcr7^`IgX^Gsg_N@I`9=lci$U!MQ} z&f}BqxF6}>MO9>beusL1f~{NpHSu3`IOlR% SckUGSQMGVhVns!r_WuTcXv*dQ diff --git a/main.c b/main.c index 8d0276b..cd1f742 100644 --- a/main.c +++ b/main.c @@ -4,10 +4,12 @@ #include "randomness.h" #include "neurons.h" #include "network.h" +#include "activations.h" +#include "training.h" int main(int argc, char *argv[]) { - init_randomness(); + //init_randomness(); printf("Bonjour et bienvenu ;)\n"); int i; @@ -15,6 +17,11 @@ int main(int argc, char *argv[]) { printf("%dth generated fload = %f\n", i, random_float(0.0 , 1.0)); }*/ + printf("sigmoid(%f) = %f\n",0.5, sigmoid(0.5)); + printf("sigmoid_derivative(%f) = %f\n",0.8, sigmoid_derivative(0.8)); + /*float a=5.0; + printf("%f\n", (float)exp((double)a));*/ + return 0; } \ No newline at end of file diff --git a/main.o b/main.o new file mode 100644 index 0000000000000000000000000000000000000000..02e92c9f08e74c4dd99f72a2a08aae2e7b2cede5 GIT binary patch literal 2104 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 S<5H2LJ!<1{nH3dv+y4)nrP9m* literal 0 HcmV?d00001 diff --git a/network.c b/network.c index aebd110..8d7f26c 100644 --- a/network.c +++ b/network.c @@ -5,15 +5,70 @@ #include "neurons.h" #include "network.h" -Neuron *generate_layer(int n_neurons, int n_neurons_prev_layer) +Neuron *generate_layer(int n_neurons, int n_neurons_prev_layer, char *activation_function) { + Neuron *first=NULL, *last=NULL; + int i; + for(i=1 ; i<=n_neurons ; i++) + { + Neuron *n = init_neuron(n_neurons_prev_layer, activation_function); + if(i==1) + { + first = n; + last = n; + }else + { + last->same_layer_next_neuron = n; + last = n; + } + } + return first; } -Network *init_network(int n_neurons_per_layer[]) +Network *init_network(int n_neurons_per_layer[], int n_layers, char *activation_function_per_layer[]) { /* initialize the network based on array n_neurons_per_layer : - - size of n_neurons_per_layer is the number of layers + - n_layers is simply the size of array n_neurons_per_layer - each ith number in array n_neurons_per_layer is the number of neurons in ith layer + - array activation_function_per_layer must be of same size as n_neurons_per_layer */ + Network *network = (Network*)malloc(sizeof(Network)); + network->n_layers = n_layers; + network->neurons_per_layer = (int*)malloc(n_layers * sizeof(int)); + network->layers_first_neurons = (Neuron**)malloc(n_layers * sizeof(Neuron*)); + int i; + for(i=0 ; ineurons_per_layer[i] = n_neurons_per_layer[i]; + if(i==0) + { + network->layers_first_neurons[i] = generate_layer(n_neurons_per_layer[i], 0, activation_function_per_layer[i]); + }else + { + network->layers_first_neurons[i] = generate_layer(n_neurons_per_layer[i], n_neurons_per_layer[i-1], activation_function_per_layer[i]); + } + } + + return network; +} + +void print_network(Network *network) +{ + +} + +void destroy_network(Network *network) +{ + int i; + Neuron *temp; + for(i=0 ; in_layers ; i++) + { + while(network->layers_first_neurons[i] != NULL) + { + temp = network->layers_first_neurons[i]; + network->layers_first_neurons[i] = temp->same_layer_next_neuron; + destroy_neuron(temp); + } + } } \ No newline at end of file diff --git a/network.h b/network.h index 3fe68eb..e1d9b33 100644 --- a/network.h +++ b/network.h @@ -4,12 +4,15 @@ typedef struct network Network; struct network { - Neuron *layers_first_neurons; //first neuron of each layer of the network - //Neuron *layers_last_neurons; //last neuron of each layer of the network + int n_layers; int *neurons_per_layer; //keeps track of number of layers' neurons + Neuron **layers_first_neurons; //pointers on first neuron of each layer of the network + //Neuron *layers_last_neurons; //last neuron of each layer of the network }; -Neuron *generate_layer(int n_neurons, int n_neurons_prev_layer); -Network *init_network(int n_neurons_per_layer[]); +Neuron *generate_layer(int n_neurons, int n_neurons_prev_layer, char *activation_function); +Network *init_network(int n_neurons_per_layer[], int n_layers, char *activation_function_per_layer[]); +void print_network(Network *network); +void destroy_network(Network *network); #endif \ No newline at end of file diff --git a/network.o b/network.o new file mode 100644 index 0000000000000000000000000000000000000000..937f7386a730410bcae08febd6c859f92e584bfe GIT binary patch literal 2456 zcmbtV&u<$=6n^W4Hc->LRSt;u;1ddnt`fBsrl87cw8<2OrlRoyA>=yFLZbQyvUh2N zNB~&{t+tVRjKn{{9f>307L@dYqGF*OdO#=zBXe-26y;FKd~ZBsuQm=s@S>SF^UZtT zoB4Le`PiPGj2Q-LGw2-kXBs71JJ27e-P-cD;T;o!y(@gXseHRNj8Pj2KrfAGv<9ZY-hS1- zzw#BZ=G{A7{W8j@gulGydkxgz`1V;;)BMcX3^ENr5!el}ChEV$M6dd7UPOT*y=LxR zOJMtaia#ErLve7d4&Pt|$y;JI9+MH=Nqrwb^q1k&}*l~0No3-0keOf_WG00kaVWr~gP~b}XwsAYi5eY(KNi}L)C$;hXbBY)cBA{? ztR?g4e5on03;V=hQt^*iD45h2{tDWlx>R!9YvsySD^Kq^C8v^eoopeu+&GHGfQT^7{*$uK!{f#8}tY{%i;f zhqnIZ{%2HvG`y{VPr{@aYyC9*ItGLEZ!7(U3S|BH*GuPX{rMcx+MM#f5_CZwl;0}n lM)R3Bsy!gu;!VNIUDxZiZW=g>!Jzz #include "randomness.h" #include "neurons.h" +#include "activations.h" -Neuron *init_neuron(int n_weights) +Neuron *init_neuron(int n_weights, char *activation_function) { Neuron *neuron = (Neuron*)malloc(sizeof(Neuron)); if(n_weights == 0) @@ -21,6 +22,15 @@ Neuron *init_neuron(int n_weights) } neuron->bias = random_float(0.0 , 1.0); neuron->output = 0.0; + if(strcmp(activation_function, "nothing") == 0) + { + //to be completed later with tanh, relu, etc : for now only sigmoid is supported and will be the default function + } + else + { + neuron->activation = sigmoid; + neuron->activation_derivative = sigmoid_derivative; + } neuron->delta_error = 0.0; neuron->same_layer_next_neuron = NULL; diff --git a/neurons.h b/neurons.h index 3fe3200..6be8b2d 100644 --- a/neurons.h +++ b/neurons.h @@ -7,11 +7,13 @@ struct neuron float *weights; //weights associated to the neuron float bias; //neuron's bias float output; //output of the neuron + float (*activation)(float); + float (*activation_derivative)(float); float delta_error; //the delta error for updating current weights Neuron *same_layer_next_neuron; }; -Neuron *init_neuron(int n_weights); +Neuron *init_neuron(int n_weights, char *activation_function); void destroy_neuron(Neuron *neuron); diff --git a/neurons.o b/neurons.o new file mode 100644 index 0000000000000000000000000000000000000000..581ad50e5a44eab0f71fa7796da4d962a3e00530 GIT binary patch literal 2368 zcmb_d-Afcv6hFJ0AC#?3|f;kWT4 z5#n~=TB6z3()@~Vn{V7&rRBiYh%syS7fP@I!^lx#i#bylw--OGVh~L?C$ic&T92+k zUr*1ac=PC3K{E^S^HPV@+H$sFx7y~~E=aBICmj~mhbaL>=)n+#remSTnyTtWT*WwY zP1J#i(yDgV#U6)yYAfYpBvKJVm7__J0CA2!LUYgVCMFORav%KM@e@S+PY^`#=Z6SJ z@qD+Q?KMK~7?v23TYKJ`iuyjF;o@cDCR?;ousw>z2l&h zNQ9Ty92&w{(=Lk>aG&$kuE8SWJmtJs|2#nd(xVq~-nsPjoCy9C=TBi>=i$l2cN!@@ms2(D!zV?R`mT+(UQ{*kZn7yC!Uc*jNx;+%ZJ^Po3nKNhb)ao)W{3f4I(-V@>o U-esY?>*v43^H*%Iy^q)b4?ToMi2wiq literal 0 HcmV?d00001 diff --git a/randomness.o b/randomness.o new file mode 100644 index 0000000000000000000000000000000000000000..5de73a752a21d646bb3866d6eebfbb28401df822 GIT binary patch literal 1808 zcmb`H&1(}u6u{qRwe=(Ers6@UNKR6#T@tLc7SVjLNe|IL+h7aox=FVr*lZv>f!c!} z1hKc?^x*%ZrJ(iZ(SJbj;6?V*L!iF5JF{6Pn~V6u%)Iw|@6E@XoxC=x<%FVu5C!hT z&=M5jyE@eKzM6*=B%!{t|ML^szo^^)>JJA`kBG0l`JMK(X=8xh!xP`*X>*@FEuErZ zPkVN#%^ss^oOs$33fnyNv<+kM?TGv}sFX^}nb~@y@34MmQNN>S=Wq9YEB7k5q-Pgy z1QdfWQwEB%w+hN`TA4{so;$#UTt!BW7XmNG?V8>DLC?HEijTXn=(= z{O%Y|wWRsQynbzwEsu$Zp5<(HJC5zTdK21Co0&rbW~Evy7OG~gTwXKQ&GkaDYM8*< z9UEK<A~or#k|;h;48h$aI7!Bm8EBQ*A{2BIgMl={5w1L(C2iStydn^=Urws zUtj>G*)4OsXJH-wlVorn`nKgSCXbBdaWI6v{9iGH9;$ghj0lt;yhzVEr~9E?@x_Wd zUFTeWDerlnJjm8msC-Ifmcz9yT2t~P;oB0Kgt#P;{M{+rnxhGqb)wtn>-(r gPfWf$MDUIus7gje_;ewm_Z^qt;?N2s14YjN3#%NXBLDyZ literal 0 HcmV?d00001 diff --git a/training.c b/training.c index e69de29..01b0775 100644 --- a/training.c +++ b/training.c @@ -0,0 +1,7 @@ +#include +#include +#include +#include "randomness.h" +#include "neurons.h" +#include "activations.h" + diff --git a/training.h b/training.h index e69de29..ddbb6e9 100644 --- a/training.h +++ b/training.h @@ -0,0 +1,6 @@ +#ifndef TRAINING_H +#define TRAINING_H + + + +#endif \ No newline at end of file diff --git a/training.o b/training.o new file mode 100644 index 0000000000000000000000000000000000000000..7e37f3176ed0157a7eb0cb73df56be689f1c6b1e GIT binary patch literal 944 zcmb<-^>JfjWMqH=Mg}_u1P><4z)*lB=l~XWVBlonU|?`}cD7Q`2u&)@D=Ael*E7{K z&^0av^9<_@E%XdbG$Eo0qp-3-#HDuqg+MGvg3v#UajuDPB^P zn366pHXfl7d} zPPTp>pk9!f20)Aq9H1O6WI-SsWN}R2_^$w_gy4eif)fSC~d9jjkU6v+gdt literal 0 HcmV?d00001