diff --git a/firmware/firmware.c b/firmware/firmware.c index 8558656b3a1265c7c4ecbe798432710eb6773587..0d1fcacc96f449617deab4877160d2ac5672721d 100644 --- a/firmware/firmware.c +++ b/firmware/firmware.c @@ -88,15 +88,15 @@ void main() uint32_t current_num_neurons; // Write params - uint32_t value_write_counter; + uint32_t value_write_counter = 0; int new_value; // Training uint32_t new_token; uint32_t token_series[MAX_NUM_TOKENS]; - int token_counter; - uint32_t learning_rate; - uint32_t decay_rate; + int token_counter = 0; + uint32_t learning_rate = 0; + uint32_t decay_rate = 0; while(true) { @@ -304,7 +304,7 @@ void main() case TRAIN_RUN_EPOCHS: uint32_t num_epochs = atoi(numstr); - response = run_training(response, num_epochs, learning_rate, decay_rate, token_series[0], token_series[1]); + //response = run_training(response, num_epochs, learning_rate, decay_rate, token_series, token_counter); command_mode = START; break; diff --git a/firmware/include/rnn.h b/firmware/include/rnn.h index bfa3461438d3383e44679db289dabfc9af403644..48ede0952c087e584b6b167bdc016e80263a5db0 100644 --- a/firmware/include/rnn.h +++ b/firmware/include/rnn.h @@ -141,14 +141,14 @@ void reset_network(); * num_epochs: Amount of epochs * learning_rate_zero: initial learning rate * decay_rate: the decay rate for gradient decay - * x: input token - * y: output token + * xp: Pointer to array of values + * xn: Amount of values in array */ char* run_training( char *msgbuf, int num_epochs, uint32_t learning_rate_zero, uint32_t decay_rate, - uint32_t x, - uint32_t y + uint32_t *xp, + uint32_t xn ); diff --git a/firmware/rnn.c b/firmware/rnn.c index 7bf595af1fa8d9249808559fd704a81b5eaff69b..c1ddcfee445257dd0e2a9ca70348880938843f66 100644 --- a/firmware/rnn.c +++ b/firmware/rnn.c @@ -393,32 +393,40 @@ void set_bias_values(int bias) * num_epochs: Amount of epochs * learning_rate_zero: initial learning rate * decay_rate: the decay rate for gradient decay - * x: input token - * y: output token + * xp: Pointer to array of values + * xn: Amount of values in array */ char* run_training( char *msgbuf, int num_epochs, uint32_t learning_rate_zero, uint32_t decay_rate, - uint32_t x, - uint32_t y + uint32_t *xp, + uint32_t xn ) { int last_val; uint32_t train_mask; - - for(int epoch=0; epoch<num_epochs;epoch++) { - reset_network(); - last_val = predict_next_token(x); - if(last_val==y) { - return "SUCCESS"; - break; + uint32_t y; + + for(uint32_t xni=1; xni<xn; xni++) { + msgbuf = "FAIL"; + y = xp[xni]; + for(int epoch=0; epoch<num_epochs;epoch++) { + reset_network(); + for(int xpi=0; xpi<xni; xpi++) { + last_val = predict_next_token(xp[xpi]); + } + if(last_val==y) { + msgbuf = "SUCCESS"; + break; + } + train_mask = last_val ^ y; + set_alpha(learning_rate_zero/(1+(decay_rate*epoch))); + mask_back_propgatation(train_mask); } - train_mask = last_val ^ y; - set_alpha(learning_rate_zero/(1+(decay_rate*epoch))); - mask_back_propgatation(train_mask); } - return "FAIL"; + + return msgbuf; } diff --git a/src/py/tty3.py b/src/py/tty3.py index 29158e4992e12bc677f6d2bfcfc463b1325a4d7d..e05a6abb21b96474c53ec89ee445a178034347ed 100644 --- a/src/py/tty3.py +++ b/src/py/tty3.py @@ -54,7 +54,6 @@ run_command(server,"DECAY_RATE") # α=(1/(1+decayRate×epochNumber))*​α0 run_command(server,str(decay_rate)) - run_command(server,"TRAIN") run_command(server,"RUN_EPOCHS") run_command(server,str(20000))