dev
This commit is contained in:
@@ -429,7 +429,6 @@ function lifLearn(wRec,
|
|||||||
synapseReconnectDelay_cpu = synapseReconnectDelay |> cpu
|
synapseReconnectDelay_cpu = synapseReconnectDelay |> cpu
|
||||||
synapticActivityCounter_cpu = synapticActivityCounter |> cpu
|
synapticActivityCounter_cpu = synapticActivityCounter |> cpu
|
||||||
zitCumulative_cpu = zitCumulative |> cpu
|
zitCumulative_cpu = zitCumulative |> cpu
|
||||||
println("synapse 3 ", synapseReconnectDelay_cpu[:,:,1,1])
|
|
||||||
# neuroplasticity, work on CPU side
|
# neuroplasticity, work on CPU side
|
||||||
wRec_cpu, neuronInactivityCounter_cpu, synapseReconnectDelay_cpu =
|
wRec_cpu, neuronInactivityCounter_cpu, synapseReconnectDelay_cpu =
|
||||||
neuroplasticity(synapseConnectionNumber,
|
neuroplasticity(synapseConnectionNumber,
|
||||||
@@ -557,13 +556,13 @@ function neuroplasticity(synapseConnectionNumber,
|
|||||||
|
|
||||||
# adjust wRec based on repeatition (90% +w, 10% -w)
|
# adjust wRec based on repeatition (90% +w, 10% -w)
|
||||||
growRepeatedPath!(wRec, synapticActivityCounter, eta)
|
growRepeatedPath!(wRec, synapticActivityCounter, eta)
|
||||||
error("DEBUG -> neuroplasticity")
|
|
||||||
# -w all non-fire connection except mature connection
|
# -w all non-fire connection except mature connection
|
||||||
weakenNotMatureSynapse!(wRec, synapticActivityCounter, eta)
|
weakenNotMatureSynapse!(wRec, synapticActivityCounter, eta)
|
||||||
|
|
||||||
# prune weak synapse
|
# prune weak synapse
|
||||||
pruneSynapse!(wRec, synapticActivityCounter, synapseReconnectDelay)
|
pruneSynapse!(wRec, synapticActivityCounter, synapseReconnectDelay)
|
||||||
|
error("DEBUG -> neuroplasticity")
|
||||||
# rewire synapse connection
|
# rewire synapse connection
|
||||||
rewireSynapse!(wRec, neuronInactivityCounter, synapticActivityCounter,
|
rewireSynapse!(wRec, neuronInactivityCounter, synapticActivityCounter,
|
||||||
synapseReconnectDelay, zitCumulative)
|
synapseReconnectDelay, zitCumulative)
|
||||||
|
|||||||
@@ -138,31 +138,46 @@ end
|
|||||||
function growRepeatedPath!(wRec, synapticActivityCounter, eta) #BUG wRec get all 0
|
function growRepeatedPath!(wRec, synapticActivityCounter, eta) #BUG wRec get all 0
|
||||||
# seperate active synapse out of inactive in this signal
|
# seperate active synapse out of inactive in this signal
|
||||||
mask_activeSynapse = (!isequal).(synapticActivityCounter, 0)
|
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
|
# adjust weight based on vt progress and repeatition (80% +w, 20% -w) depend on epsilonRec
|
||||||
avgActivity = sum(synapticActivityCounter) / length(synapticActivityCounter)
|
avgActivity = sum(synapticActivityCounter) / sum(mask_activeSynapse)
|
||||||
lowerlimit = 0.1 * avgActivity
|
# 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
|
# +w, synapse with more than 10% of avg activity get increase weight by eta
|
||||||
mask_more = (!isless).(synapticActivityCounter, lowerlimit)
|
mask_more = (!isless).(synapticActivityCounter, lowerlimit)
|
||||||
mask_2 = GeneralUtils.allTrue.(mask_activeSynapse, mask_more)
|
mask_2 = GeneralUtils.allTrue.(mask_activeSynapse, mask_more)
|
||||||
mask_3 = mask_2 .* (1 .+ eta) # minor activity synapse weight will be reduced by eta
|
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
|
wRec .*= mask_3
|
||||||
|
|
||||||
# -w, synapse with less than 10% of avg activity get reduced weight by eta
|
# -w, synapse with less than 10% of avg activity get reduced weight by eta
|
||||||
mask_less = GeneralUtils.isBetween.(synapticActivityCounter, 0, lowerlimit) # 1st criteria
|
mask_less = GeneralUtils.isBetween.(synapticActivityCounter, 0, lowerlimit) # 1st criteria
|
||||||
mask_3 = GeneralUtils.allTrue.(mask_activeSynapse, mask_less)
|
mask_3 = GeneralUtils.allTrue.(mask_activeSynapse, mask_less)
|
||||||
mask_4 = mask_3 .* (1 .- eta) # minor activity synapse weight will be reduced by eta
|
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
|
wRec .*= mask_4
|
||||||
error("DEBUG -> growRepeatedPath!")
|
# println("wRec 2 ", wRec[:,:,1,1])
|
||||||
|
# error("DEBUG -> growRepeatedPath!")
|
||||||
end
|
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_inactiveSynapse = isequal.(synapticActivityCounter, 0)
|
||||||
mask_notmature = GeneralUtils.isBetween.(wRec, 0.0, 0.1) # 2nd criteria, not mature synapse has weight < 0.1
|
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)
|
mask_1 = GeneralUtils.allTrue.(mask_inactiveSynapse, mask_notmature)
|
||||||
|
# println("mask_1 ", mask_1[:,:,1,1])
|
||||||
mask_2 = mask_1 .* (1 .- eta)
|
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
|
wRec .*= mask_2
|
||||||
|
# println("wRec 2 ", wRec[:,:,1,1])
|
||||||
end
|
end
|
||||||
|
|
||||||
function pruneSynapse!(wRec, synapticActivityCounter, synapseReconnectDelay)
|
function pruneSynapse!(wRec, synapticActivityCounter, synapseReconnectDelay)
|
||||||
|
|||||||
Reference in New Issue
Block a user