add frequency regulator
This commit is contained in:
@@ -421,13 +421,13 @@ function alifForward( zit,
|
||||
phi[i1,i2,i3,i4] = (gammaPd[i1,i2,i3,i4] / vth[i1,i2,i3,i4]) *
|
||||
max(0, 1 - ((vt[i1,i2,i3,i4] - vth[i1,i2,i3,i4]) / vth[i1,i2,i3,i4]))
|
||||
|
||||
# compute epsilonRec
|
||||
epsilonRec[i1,i2,i3,i4] = (alpha[i1,i2,i3,i4] * epsilonRec[i1,i2,i3,i4]) +
|
||||
(zit[i1,i2,i3,i4] * subscription[i1,i2,i3,i4])
|
||||
|
||||
# compute epsilonRecA use eq.26
|
||||
epsilonRecA[i1,i2,i3,i4] = (rho[i1,i2,i3,i4] *
|
||||
(phi[i1,i2,i3,i4] * epsilonRecA[i1,i2,i3,i4])) +
|
||||
(phi[i1,i2,i3,i4] * epsilonRec[i1,i2,i3,i4])) +
|
||||
(zit[i1,i2,i3,i4] * subscription[i1,i2,i3,i4])
|
||||
|
||||
# compute epsilonRec
|
||||
epsilonRec[i1,i2,i3,i4] = (alpha[i1,i2,i3,i4] * epsilonRec[i1,i2,i3,i4]) +
|
||||
(zit[i1,i2,i3,i4] * subscription[i1,i2,i3,i4])
|
||||
end
|
||||
end
|
||||
|
||||
17
src/learn.jl
17
src/learn.jl
@@ -10,7 +10,8 @@ using ..type, ..snnUtil
|
||||
|
||||
function compute_paramsChange!(kfn::kfn_1, modelError, outputError)
|
||||
modelError = reshape(modelError, (1,1,1,:)) # (1,1,1,batch)
|
||||
lifComputeParamsChange!(kfn.lif_phi,
|
||||
lifComputeParamsChange!(kfn.timeStep,
|
||||
kfn.lif_phi,
|
||||
kfn.lif_epsilonRec,
|
||||
kfn.lif_eta,
|
||||
kfn.lif_eRec,
|
||||
@@ -26,7 +27,8 @@ function compute_paramsChange!(kfn::kfn_1, modelError, outputError)
|
||||
kfn.inputSize,
|
||||
)
|
||||
|
||||
alifComputeParamsChange!(kfn.alif_phi,
|
||||
alifComputeParamsChange!(kfn.timeStep,
|
||||
kfn.alif_phi,
|
||||
kfn.alif_epsilonRec,
|
||||
kfn.alif_eta,
|
||||
kfn.alif_eRec,
|
||||
@@ -47,7 +49,6 @@ function compute_paramsChange!(kfn::kfn_1, modelError, outputError)
|
||||
kfn.on_epsilonRec,
|
||||
kfn.on_eta,
|
||||
kfn.on_eRec,
|
||||
kfn.on_wOut,
|
||||
kfn.on_wOutChange,
|
||||
kfn.on_arrayProjection4d,
|
||||
kfn.on_error,
|
||||
@@ -56,7 +57,8 @@ function compute_paramsChange!(kfn::kfn_1, modelError, outputError)
|
||||
# error("DEBUG -> kfn compute_paramsChange! $(Dates.now())")
|
||||
end
|
||||
|
||||
function lifComputeParamsChange!( phi::CuArray,
|
||||
function lifComputeParamsChange!( timeStep::CuArray,
|
||||
phi::CuArray,
|
||||
epsilonRec::CuArray,
|
||||
eta::CuArray,
|
||||
eRec::CuArray,
|
||||
@@ -88,12 +90,15 @@ function lifComputeParamsChange!( phi::CuArray,
|
||||
wRecChange .+= (-eta .* nError .* eRec)
|
||||
|
||||
#TODO frequency regulator
|
||||
wRecChange .+= 0.0001 .* ((firingTargetFrequency - (firingCounter./timeStep)) ./ timeStep) .*
|
||||
eta .* eRec
|
||||
|
||||
# reset epsilonRec
|
||||
epsilonRec .= 0
|
||||
end
|
||||
|
||||
function alifComputeParamsChange!( phi::CuArray,
|
||||
function alifComputeParamsChange!( timeStep::CuArray,
|
||||
phi::CuArray,
|
||||
epsilonRec::CuArray,
|
||||
eta::CuArray,
|
||||
eRec::CuArray,
|
||||
@@ -125,6 +130,8 @@ function alifComputeParamsChange!( phi::CuArray,
|
||||
wRecChange .+= (-eta .* nError .* eRec)
|
||||
|
||||
#TODO frequency regulator
|
||||
wRecChange .+= 0.0001 .* ((firingTargetFrequency - (firingCounter./timeStep)) ./ timeStep) .*
|
||||
eta .* eRec
|
||||
|
||||
# reset epsilonRec
|
||||
epsilonRec .= 0
|
||||
|
||||
@@ -217,7 +217,8 @@ function kfn_1(params::Dict; device=cpu)
|
||||
kfn.lif_subscription = (GeneralUtils.isNotEqual.(kfn.lif_wRec, 0)) |> device
|
||||
|
||||
kfn.lif_firingCounter = (similar(kfn.lif_wRec) .= 0) |> device
|
||||
kfn.lif_firingTargetFrequency = (similar(kfn.lif_wRec) .= 80) |> device
|
||||
# firingTargetFrequency = desired count / total sequence length
|
||||
kfn.lif_firingTargetFrequency = (similar(kfn.lif_wRec) .= 0.2) |> device
|
||||
|
||||
kfn.lif_arrayProjection4d = (similar(kfn.lif_wRec) .= 1) |> device
|
||||
kfn.lif_recSignal = (similar(kfn.lif_wRec) .= 0) |> device
|
||||
@@ -265,7 +266,8 @@ function kfn_1(params::Dict; device=cpu)
|
||||
kfn.alif_subscription = (GeneralUtils.isNotEqual.(kfn.alif_wRec, 0)) |> device
|
||||
|
||||
kfn.alif_firingCounter = (similar(kfn.alif_wRec) .= 0) |> device
|
||||
kfn.alif_firingTargetFrequency = (similar(kfn.alif_wRec) .= 80) |> device
|
||||
# firingTargetFrequency = desired count / total sequence length
|
||||
kfn.alif_firingTargetFrequency = (similar(kfn.alif_wRec) .= 0.2) |> device
|
||||
|
||||
kfn.alif_arrayProjection4d = (similar(kfn.alif_wRec) .= 1) |> device
|
||||
kfn.alif_recSignal = (similar(kfn.alif_wRec) .= 0) |> device
|
||||
|
||||
Reference in New Issue
Block a user