This commit is contained in:
ton
2023-09-20 22:20:41 +07:00
parent edd26c180d
commit 415e7fc2f3
3 changed files with 20 additions and 18 deletions

View File

@@ -282,7 +282,7 @@ function lifForward( zit,
refractoryCounter[i1,i2,i3,i4] -= 1 refractoryCounter[i1,i2,i3,i4] -= 1
recSignal[i1,i2,i3,i4] = 0 recSignal[i1,i2,i3,i4] = 0
zt[i1,i2,i3,i4] = 0 zt[i1,i2,i3,i4] = 0
vt[i1,i2,i3,i4] = alpha[i1,i2,i3,i4] * vt[i1,i2,i3,i4] vt[i1,i2,i3,i4] = (1 - alpha[i1,i2,i3,i4]) * vt[i1,i2,i3,i4]
phi[i1,i2,i3,i4] = 0 phi[i1,i2,i3,i4] = 0
# compute epsilonRec # compute epsilonRec
@@ -299,7 +299,7 @@ function lifForward( zit,
zt[i1,i2,i3,i4] = 1 zt[i1,i2,i3,i4] = 1
refractoryCounter[i1,i2,i3,i4] = refractoryDuration[i1,i2,i3,i4] refractoryCounter[i1,i2,i3,i4] = refractoryDuration[i1,i2,i3,i4]
firingCounter[i1,i2,i3,i4] += 1 firingCounter[i1,i2,i3,i4] += 1
vt[i1,i2,i3,i4] = vRest[i1,i2,i3,i4] # vt[i1,i2,i3,i4] = vRest[i1,i2,i3,i4]
# reset counter if neuron fires # reset counter if neuron fires
neuronInactivityCounter[i1,i2,i3,i4] = 0 neuronInactivityCounter[i1,i2,i3,i4] = 0
@@ -320,7 +320,7 @@ function lifForward( zit,
synapticActivityCounter[i1,i2,i3,i4] += zit[i1,i2,i3,i4] * !iszero(wRec[i1,i2,i3,i4]) synapticActivityCounter[i1,i2,i3,i4] += zit[i1,i2,i3,i4] * !iszero(wRec[i1,i2,i3,i4])
# voltage regulator # voltage regulator
wRecChange[i1,i2,i3,i4] = -0.01*0.0001 * (vt[i1,i2,i3,i4] - vth[i1,i2,i3,i4]) * wRecChange[i1,i2,i3,i4] = -0.001 * (vt[i1,i2,i3,i4] - vth[i1,i2,i3,i4]) *
zit[i1,i2,i3,i4] zit[i1,i2,i3,i4]
# negative value is counting mode, -0.1 < -0.1 won't work on GPU # negative value is counting mode, -0.1 < -0.1 won't work on GPU
@@ -476,7 +476,7 @@ function alifForward( zit,
refractoryCounter[i1,i2,i3,i4] -= 1 refractoryCounter[i1,i2,i3,i4] -= 1
recSignal[i1,i2,i3,i4] = 0 recSignal[i1,i2,i3,i4] = 0
zt[i1,i2,i3,i4] = 0 zt[i1,i2,i3,i4] = 0
vt[i1,i2,i3,i4] = alpha[i1,i2,i3,i4] * vt[i1,i2,i3,i4] vt[i1,i2,i3,i4] = (1 - alpha[i1,i2,i3,i4]) * vt[i1,i2,i3,i4]
phi[i1,i2,i3,i4] = 0 phi[i1,i2,i3,i4] = 0
a[i1,i2,i3,i4] = rho[i1,i2,i3,i4] * a[i1,i2,i3,i4] a[i1,i2,i3,i4] = rho[i1,i2,i3,i4] * a[i1,i2,i3,i4]
@@ -504,7 +504,7 @@ function alifForward( zit,
zt[i1,i2,i3,i4] = 1 zt[i1,i2,i3,i4] = 1
refractoryCounter[i1,i2,i3,i4] = refractoryDuration[i1,i2,i3,i4] refractoryCounter[i1,i2,i3,i4] = refractoryDuration[i1,i2,i3,i4]
firingCounter[i1,i2,i3,i4] += 1 firingCounter[i1,i2,i3,i4] += 1
vt[i1,i2,i3,i4] = vRest[i1,i2,i3,i4] # vt[i1,i2,i3,i4] = vRest[i1,i2,i3,i4]
a[i1,i2,i3,i4] = (rho[i1,i2,i3,i4] * a[i1,i2,i3,i4]) + 1 a[i1,i2,i3,i4] = (rho[i1,i2,i3,i4] * a[i1,i2,i3,i4]) + 1
neuronInactivityCounter[i1,i2,i3,i4] = 0 neuronInactivityCounter[i1,i2,i3,i4] = 0
else else
@@ -528,7 +528,7 @@ function alifForward( zit,
synapticActivityCounter[i1,i2,i3,i4] += zit[i1,i2,i3,i4] * !iszero(wRec[i1,i2,i3,i4]) synapticActivityCounter[i1,i2,i3,i4] += zit[i1,i2,i3,i4] * !iszero(wRec[i1,i2,i3,i4])
# voltage regulator # voltage regulator
wRecChange[i1,i2,i3,i4] = -0.01*0.0001 * (vt[i1,i2,i3,i4] - avth[i1,i2,i3,i4]) * wRecChange[i1,i2,i3,i4] = -0.001 * (vt[i1,i2,i3,i4] - avth[i1,i2,i3,i4]) *
zit[i1,i2,i3,i4] zit[i1,i2,i3,i4]
# negative value is counting mode, -0.1 < -0.1 won't work on GPU # negative value is counting mode, -0.1 < -0.1 won't work on GPU
@@ -640,7 +640,7 @@ function onForward( zit,
refractoryCounter[i1,i2,i3,i4] -= 1 refractoryCounter[i1,i2,i3,i4] -= 1
recSignal[i1,i2,i3,i4] = 0 recSignal[i1,i2,i3,i4] = 0
zt[i1,i2,i3,i4] = 0 zt[i1,i2,i3,i4] = 0
vt[i1,i2,i3,i4] = alpha[i1,i2,i3,i4] * vt[i1,i2,i3,i4] vt[i1,i2,i3,i4] = (1 - alpha[i1,i2,i3,i4]) * vt[i1,i2,i3,i4]
phi[i1,i2,i3,i4] = 0 phi[i1,i2,i3,i4] = 0
# compute epsilonRec # compute epsilonRec
@@ -655,7 +655,7 @@ function onForward( zit,
zt[i1,i2,i3,i4] = 1 zt[i1,i2,i3,i4] = 1
refractoryCounter[i1,i2,i3,i4] = refractoryDuration[i1,i2,i3,i4] refractoryCounter[i1,i2,i3,i4] = refractoryDuration[i1,i2,i3,i4]
firingCounter[i1,i2,i3,i4] += 1 firingCounter[i1,i2,i3,i4] += 1
vt[i1,i2,i3,i4] = vRest[i1,i2,i3,i4] vt[i1,i2,i3,i4] = (1 - alpha[i1,i2,i3,i4]) * vt[i1,i2,i3,i4]
else else
zt[i1,i2,i3,i4] = 0 zt[i1,i2,i3,i4] = 0
end end

View File

@@ -106,8 +106,9 @@ function lifComputeParamsChange!( timeStep::CuArray,
wRecChange .+= (eta .* nError .* eRec) wRecChange .+= (eta .* nError .* eRec)
# frequency regulator # frequency regulator
freqError = (firingTargetFrequency - (firingCounter./timeStep)) ./ timeStep targetFiringCount = firingTargetFrequency .* timeStep
freqWRecChange = -0.1 .* freqError .* eta .* eRec freqError = (firingCounter .- targetFiringCount) ./ timeStep
freqWRecChange = -1 .* freqError .* eta .* eRec
wRecChange .+= freqWRecChange wRecChange .+= freqWRecChange
# reset epsilonRec # reset epsilonRec
@@ -158,8 +159,9 @@ function alifComputeParamsChange!( timeStep::CuArray,
wRecChange .+= (eta .* nError .* eRec) wRecChange .+= (eta .* nError .* eRec)
# frequency regulator # frequency regulator
freqError = (firingTargetFrequency - (firingCounter./timeStep)) ./ timeStep targetFiringCount = firingTargetFrequency .* timeStep
freqWRecChange = -0.1 .* freqError .* eta .* eRec freqError = (firingCounter .- targetFiringCount) ./ timeStep
freqWRecChange = -1 .* freqError .* eta .* eRec
wRecChange .+= freqWRecChange wRecChange .+= freqWRecChange
# wRecChange .+= 0.01 .* ((firingTargetFrequency - (firingCounter./timeStep)) ./ timeStep) .* # wRecChange .+= 0.01 .* ((firingTargetFrequency - (firingCounter./timeStep)) ./ timeStep) .*
# eta .* eRec # eta .* eRec

View File

@@ -216,8 +216,8 @@ function kfn_1(params::Dict; device=cpu)
kfn.lif_refractoryCounter = (similar(kfn.lif_wRec) .= 0) kfn.lif_refractoryCounter = (similar(kfn.lif_wRec) .= 0)
kfn.lif_refractoryDuration = (similar(kfn.lif_wRec) .= 3) kfn.lif_refractoryDuration = (similar(kfn.lif_wRec) .= 3)
kfn.lif_delta = 1.0 kfn.lif_delta = 1.0
kfn.lif_tau_m = 20.0 kfn.lif_tau_m = 100.0
kfn.lif_alpha = (similar(kfn.lif_wRec) .= (exp(-kfn.lif_delta / kfn.lif_tau_m))) kfn.lif_alpha = (similar(kfn.lif_wRec) .= (exp(-kfn.lif_delta / kfn.lif_tau_m)))
kfn.lif_phi = (similar(kfn.lif_wRec) .= 0) kfn.lif_phi = (similar(kfn.lif_wRec) .= 0)
kfn.lif_epsilonRec = (similar(kfn.lif_wRec) .= 0) kfn.lif_epsilonRec = (similar(kfn.lif_wRec) .= 0)
kfn.lif_eRec = (similar(kfn.lif_wRec) .= 0) kfn.lif_eRec = (similar(kfn.lif_wRec) .= 0)
@@ -227,7 +227,7 @@ function kfn_1(params::Dict; device=cpu)
kfn.lif_error = (similar(kfn.lif_wRec) .= 0) kfn.lif_error = (similar(kfn.lif_wRec) .= 0)
kfn.lif_firingCounter = (similar(kfn.lif_wRec) .= 0) kfn.lif_firingCounter = (similar(kfn.lif_wRec) .= 0)
kfn.lif_firingTargetFrequency = (similar(kfn.lif_wRec) .= 10) kfn.lif_firingTargetFrequency = (similar(kfn.lif_wRec) .= 0.1)
kfn.lif_neuronInactivityCounter = (similar(kfn.lif_wRec) .= 0) kfn.lif_neuronInactivityCounter = (similar(kfn.lif_wRec) .= 0)
# count subscribed synapse activity, just like epsilonRec but without decay. # count subscribed synapse activity, just like epsilonRec but without decay.
@@ -265,7 +265,7 @@ function kfn_1(params::Dict; device=cpu)
kfn.alif_refractoryCounter = (similar(kfn.alif_wRec) .= 0) kfn.alif_refractoryCounter = (similar(kfn.alif_wRec) .= 0)
kfn.alif_refractoryDuration = (similar(kfn.alif_wRec) .= 3) kfn.alif_refractoryDuration = (similar(kfn.alif_wRec) .= 3)
kfn.alif_delta = 1.0 kfn.alif_delta = 1.0
kfn.alif_tau_m = 20.0 kfn.alif_tau_m = 100.0
kfn.alif_alpha = (similar(kfn.alif_wRec) .= (exp(-kfn.alif_delta / kfn.alif_tau_m))) kfn.alif_alpha = (similar(kfn.alif_wRec) .= (exp(-kfn.alif_delta / kfn.alif_tau_m)))
kfn.alif_phi = (similar(kfn.alif_wRec) .= 0) kfn.alif_phi = (similar(kfn.alif_wRec) .= 0)
kfn.alif_epsilonRec = (similar(kfn.alif_wRec) .= 0) kfn.alif_epsilonRec = (similar(kfn.alif_wRec) .= 0)
@@ -276,7 +276,7 @@ function kfn_1(params::Dict; device=cpu)
kfn.alif_error = (similar(kfn.alif_wRec) .= 0) kfn.alif_error = (similar(kfn.alif_wRec) .= 0)
kfn.alif_firingCounter = (similar(kfn.alif_wRec) .= 0) kfn.alif_firingCounter = (similar(kfn.alif_wRec) .= 0)
kfn.alif_firingTargetFrequency = (similar(kfn.alif_wRec) .= 10) kfn.alif_firingTargetFrequency = (similar(kfn.alif_wRec) .= 0.1)
kfn.alif_neuronInactivityCounter = (similar(kfn.alif_wRec) .= 0) kfn.alif_neuronInactivityCounter = (similar(kfn.alif_wRec) .= 0)
kfn.alif_synapseReconnectDelay = (similar(kfn.alif_wRec) .= -0.1) # -0.1 for non-sub conn kfn.alif_synapseReconnectDelay = (similar(kfn.alif_wRec) .= -0.1) # -0.1 for non-sub conn
kfn.alif_synapticActivityCounter = (similar(kfn.alif_wRec) .= 0) kfn.alif_synapticActivityCounter = (similar(kfn.alif_wRec) .= 0)
@@ -338,7 +338,7 @@ function kfn_1(params::Dict; device=cpu)
kfn.on_refractoryCounter = (similar(kfn.on_wOut) .= 0) kfn.on_refractoryCounter = (similar(kfn.on_wOut) .= 0)
kfn.on_refractoryDuration = (similar(kfn.on_wOut) .= 0) kfn.on_refractoryDuration = (similar(kfn.on_wOut) .= 0)
kfn.on_delta = 1.0 kfn.on_delta = 1.0
kfn.on_tau_m = 20.0 kfn.on_tau_m = 100.0
kfn.on_alpha = (similar(kfn.on_wOut) .= (exp(-kfn.on_delta / kfn.on_tau_m))) kfn.on_alpha = (similar(kfn.on_wOut) .= (exp(-kfn.on_delta / kfn.on_tau_m)))
kfn.on_phi = (similar(kfn.on_wOut) .= 0) kfn.on_phi = (similar(kfn.on_wOut) .= 0)
kfn.on_epsilonRec = (similar(kfn.on_wOut) .= 0) kfn.on_epsilonRec = (similar(kfn.on_wOut) .= 0)