diff --git a/src/learn.jl b/src/learn.jl index edbba7b..6a7bcbd 100644 --- a/src/learn.jl +++ b/src/learn.jl @@ -429,7 +429,6 @@ function lifLearn(wRec, synapseReconnectDelay_cpu = synapseReconnectDelay |> cpu synapticActivityCounter_cpu = synapticActivityCounter |> cpu zitCumulative_cpu = zitCumulative |> cpu - println("synapse 3 ", synapseReconnectDelay_cpu[:,:,1,1]) # neuroplasticity, work on CPU side wRec_cpu, neuronInactivityCounter_cpu, synapseReconnectDelay_cpu = neuroplasticity(synapseConnectionNumber, @@ -557,13 +556,13 @@ function neuroplasticity(synapseConnectionNumber, # adjust wRec based on repeatition (90% +w, 10% -w) growRepeatedPath!(wRec, synapticActivityCounter, eta) - error("DEBUG -> neuroplasticity") + # -w all non-fire connection except mature connection weakenNotMatureSynapse!(wRec, synapticActivityCounter, eta) - + # prune weak synapse pruneSynapse!(wRec, synapticActivityCounter, synapseReconnectDelay) - + error("DEBUG -> neuroplasticity") # rewire synapse connection rewireSynapse!(wRec, neuronInactivityCounter, synapticActivityCounter, synapseReconnectDelay, zitCumulative) diff --git a/src/snnUtil.jl b/src/snnUtil.jl index 97f58e0..adce33b 100644 --- a/src/snnUtil.jl +++ b/src/snnUtil.jl @@ -138,31 +138,46 @@ end function growRepeatedPath!(wRec, synapticActivityCounter, eta) #BUG wRec get all 0 # seperate active synapse out of inactive in this signal mask_activeSynapse = (!isequal).(synapticActivityCounter, 0) + # println("synapticActivityCounter ", synapticActivityCounter[:,:,1,1]) - # adjust weight based on vt progress and repeatition (90% +w, 10% -w) depend on epsilonRec - avgActivity = sum(synapticActivityCounter) / length(synapticActivityCounter) - lowerlimit = 0.1 * avgActivity + # adjust weight based on vt progress and repeatition (80% +w, 20% -w) depend on epsilonRec + avgActivity = sum(synapticActivityCounter) / sum(mask_activeSynapse) + # println("avgActivity ", avgActivity) + # println("mask_activeSynapse ", sum(mask_activeSynapse)) + lowerlimit = 0.2 * avgActivity + # println("lowerlimit ", lowerlimit) # +w, synapse with more than 10% of avg activity get increase weight by eta mask_more = (!isless).(synapticActivityCounter, lowerlimit) mask_2 = GeneralUtils.allTrue.(mask_activeSynapse, mask_more) mask_3 = mask_2 .* (1 .+ eta) # minor activity synapse weight will be reduced by eta + GeneralUtils.replaceElements!(mask_3, 0, 1) # replace 0 with 1 so mask * Wrec will not get 0 weight wRec .*= mask_3 - + # -w, synapse with less than 10% of avg activity get reduced weight by eta mask_less = GeneralUtils.isBetween.(synapticActivityCounter, 0, lowerlimit) # 1st criteria mask_3 = GeneralUtils.allTrue.(mask_activeSynapse, mask_less) mask_4 = mask_3 .* (1 .- eta) # minor activity synapse weight will be reduced by eta + # println("wRec 1 ", wRec[:,:,1,1]) + # println("mask_less ", mask_less[:,:,1,1]) + GeneralUtils.replaceElements!(mask_4, 0, 1) # replace 0 with 1 so mask * Wrec will not get 0 weight + # println("mask_4 ", mask_4[:,:,1,1]) wRec .*= mask_4 - error("DEBUG -> growRepeatedPath!") + # println("wRec 2 ", wRec[:,:,1,1]) + # error("DEBUG -> growRepeatedPath!") end -function weakenNotMatureSynapse!(wRec, synapticActivityCounter, eta) +function weakenNotMatureSynapse!(wRec, synapticActivityCounter, eta) # TODO not fully tested, there is no connection YET where there is 0 synapse activity but wRec is not 0 (subscribed) + # println("wRec ", wRec[:,:,1,1]) mask_inactiveSynapse = isequal.(synapticActivityCounter, 0) mask_notmature = GeneralUtils.isBetween.(wRec, 0.0, 0.1) # 2nd criteria, not mature synapse has weight < 0.1 + # println("mask_notmature ", mask_notmature[:,:,1,1]) mask_1 = GeneralUtils.allTrue.(mask_inactiveSynapse, mask_notmature) + # println("mask_1 ", mask_1[:,:,1,1]) mask_2 = mask_1 .* (1 .- eta) + GeneralUtils.replaceElements!(mask_2, 0, 1) # replace 0 with 1 so mask * Wrec will not get 0 weight wRec .*= mask_2 + # println("wRec 2 ", wRec[:,:,1,1]) end function pruneSynapse!(wRec, synapticActivityCounter, synapseReconnectDelay)