dev
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user