From 7f68d35369d8c02b37559205a4ead8ba6a4d3ca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Lanzend=C3=B6rfer?= <leviathan@libresilicon.com> Date: Sun, 30 Jun 2024 07:05:34 +0100 Subject: [PATCH] Add training for RNN during backprop --- src/rtl/neuron.v | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/rtl/neuron.v b/src/rtl/neuron.v index 857c783..6895e96 100644 --- a/src/rtl/neuron.v +++ b/src/rtl/neuron.v @@ -101,7 +101,7 @@ module neuron #( else if(!backprop_done && backprop_running) begin - + // Adjust normal weights if( regidx < NUMBER_SYNAPSES ) begin if(backprop_in_port_store[regidx] && neuron_output) begin @@ -113,15 +113,26 @@ module neuron #( end regidx <= regidx+1; end - - else if( regidx == NUMBER_SYNAPSES ) + // Adjust RNN weights + else if( regidx < NUM_WEIGHTS ) + begin + if(rnn_inputs[regidx] && neuron_output) begin + RNNW[regidx-NUMBER_SYNAPSES] <= $signed(RNNW[regidx-NUMBER_SYNAPSES]) - $signed(dw); + end + else + if(rnn_inputs[regidx] && !neuron_output) begin + RNNW[regidx-NUMBER_SYNAPSES] <= $signed(RNNW[regidx-NUMBER_SYNAPSES]) + $signed(dw); + end + regidx <= regidx+1; + end + // Reset the redister index counter + else if( regidx == NUM_WEIGHTS ) begin //$display("Backprop done"); backprop_done <= 1; backprop_running <= 0; regidx <= 0; end - end else -- GitLab