diff --git a/src/forward.jl b/src/forward.jl index bdd13ef..76e13d1 100644 --- a/src/forward.jl +++ b/src/forward.jl @@ -282,7 +282,7 @@ function lifForward( zit, refractoryCounter[i1,i2,i3,i4] -= 1 recSignal[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 # compute epsilonRec @@ -299,7 +299,7 @@ function lifForward( zit, zt[i1,i2,i3,i4] = 1 refractoryCounter[i1,i2,i3,i4] = refractoryDuration[i1,i2,i3,i4] 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 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]) # 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] # 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 recSignal[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 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 refractoryCounter[i1,i2,i3,i4] = refractoryDuration[i1,i2,i3,i4] 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 neuronInactivityCounter[i1,i2,i3,i4] = 0 else @@ -528,7 +528,7 @@ function alifForward( zit, synapticActivityCounter[i1,i2,i3,i4] += zit[i1,i2,i3,i4] * !iszero(wRec[i1,i2,i3,i4]) # 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] # 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 recSignal[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 # compute epsilonRec @@ -655,7 +655,7 @@ function onForward( zit, zt[i1,i2,i3,i4] = 1 refractoryCounter[i1,i2,i3,i4] = refractoryDuration[i1,i2,i3,i4] 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 zt[i1,i2,i3,i4] = 0 end diff --git a/src/learn.jl b/src/learn.jl index 6668c60..9aaabc7 100644 --- a/src/learn.jl +++ b/src/learn.jl @@ -106,8 +106,9 @@ function lifComputeParamsChange!( timeStep::CuArray, wRecChange .+= (eta .* nError .* eRec) # frequency regulator - freqError = (firingTargetFrequency - (firingCounter./timeStep)) ./ timeStep - freqWRecChange = -0.1 .* freqError .* eta .* eRec + targetFiringCount = firingTargetFrequency .* timeStep + freqError = (firingCounter .- targetFiringCount) ./ timeStep + freqWRecChange = -1 .* freqError .* eta .* eRec wRecChange .+= freqWRecChange # reset epsilonRec @@ -158,8 +159,9 @@ function alifComputeParamsChange!( timeStep::CuArray, wRecChange .+= (eta .* nError .* eRec) # frequency regulator - freqError = (firingTargetFrequency - (firingCounter./timeStep)) ./ timeStep - freqWRecChange = -0.1 .* freqError .* eta .* eRec + targetFiringCount = firingTargetFrequency .* timeStep + freqError = (firingCounter .- targetFiringCount) ./ timeStep + freqWRecChange = -1 .* freqError .* eta .* eRec wRecChange .+= freqWRecChange # wRecChange .+= 0.01 .* ((firingTargetFrequency - (firingCounter./timeStep)) ./ timeStep) .* # eta .* eRec diff --git a/src/type.jl b/src/type.jl index 32b21e5..ada983e 100644 --- a/src/type.jl +++ b/src/type.jl @@ -216,8 +216,8 @@ function kfn_1(params::Dict; device=cpu) kfn.lif_refractoryCounter = (similar(kfn.lif_wRec) .= 0) kfn.lif_refractoryDuration = (similar(kfn.lif_wRec) .= 3) kfn.lif_delta = 1.0 - kfn.lif_tau_m = 20.0 - kfn.lif_alpha = (similar(kfn.lif_wRec) .= (exp(-kfn.lif_delta / kfn.lif_tau_m))) + kfn.lif_tau_m = 100.0 + 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_epsilonRec = (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_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) # 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_refractoryDuration = (similar(kfn.alif_wRec) .= 3) 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_phi = (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_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_synapseReconnectDelay = (similar(kfn.alif_wRec) .= -0.1) # -0.1 for non-sub conn 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_refractoryDuration = (similar(kfn.on_wOut) .= 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_phi = (similar(kfn.on_wOut) .= 0) kfn.on_epsilonRec = (similar(kfn.on_wOut) .= 0)