dev
This commit is contained in:
@@ -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
|
||||||
|
|||||||
10
src/learn.jl
10
src/learn.jl
@@ -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
|
||||||
|
|||||||
12
src/type.jl
12
src/type.jl
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user