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]) *
|
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]))
|
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
|
# compute epsilonRecA use eq.26
|
||||||
epsilonRecA[i1,i2,i3,i4] = (rho[i1,i2,i3,i4] *
|
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])
|
(zit[i1,i2,i3,i4] * subscription[i1,i2,i3,i4])
|
||||||
end
|
end
|
||||||
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)
|
function compute_paramsChange!(kfn::kfn_1, modelError, outputError)
|
||||||
modelError = reshape(modelError, (1,1,1,:)) # (1,1,1,batch)
|
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_epsilonRec,
|
||||||
kfn.lif_eta,
|
kfn.lif_eta,
|
||||||
kfn.lif_eRec,
|
kfn.lif_eRec,
|
||||||
@@ -26,7 +27,8 @@ function compute_paramsChange!(kfn::kfn_1, modelError, outputError)
|
|||||||
kfn.inputSize,
|
kfn.inputSize,
|
||||||
)
|
)
|
||||||
|
|
||||||
alifComputeParamsChange!(kfn.alif_phi,
|
alifComputeParamsChange!(kfn.timeStep,
|
||||||
|
kfn.alif_phi,
|
||||||
kfn.alif_epsilonRec,
|
kfn.alif_epsilonRec,
|
||||||
kfn.alif_eta,
|
kfn.alif_eta,
|
||||||
kfn.alif_eRec,
|
kfn.alif_eRec,
|
||||||
@@ -47,7 +49,6 @@ function compute_paramsChange!(kfn::kfn_1, modelError, outputError)
|
|||||||
kfn.on_epsilonRec,
|
kfn.on_epsilonRec,
|
||||||
kfn.on_eta,
|
kfn.on_eta,
|
||||||
kfn.on_eRec,
|
kfn.on_eRec,
|
||||||
kfn.on_wOut,
|
|
||||||
kfn.on_wOutChange,
|
kfn.on_wOutChange,
|
||||||
kfn.on_arrayProjection4d,
|
kfn.on_arrayProjection4d,
|
||||||
kfn.on_error,
|
kfn.on_error,
|
||||||
@@ -56,7 +57,8 @@ function compute_paramsChange!(kfn::kfn_1, modelError, outputError)
|
|||||||
# error("DEBUG -> kfn compute_paramsChange! $(Dates.now())")
|
# error("DEBUG -> kfn compute_paramsChange! $(Dates.now())")
|
||||||
end
|
end
|
||||||
|
|
||||||
function lifComputeParamsChange!( phi::CuArray,
|
function lifComputeParamsChange!( timeStep::CuArray,
|
||||||
|
phi::CuArray,
|
||||||
epsilonRec::CuArray,
|
epsilonRec::CuArray,
|
||||||
eta::CuArray,
|
eta::CuArray,
|
||||||
eRec::CuArray,
|
eRec::CuArray,
|
||||||
@@ -88,12 +90,15 @@ function lifComputeParamsChange!( phi::CuArray,
|
|||||||
wRecChange .+= (-eta .* nError .* eRec)
|
wRecChange .+= (-eta .* nError .* eRec)
|
||||||
|
|
||||||
#TODO frequency regulator
|
#TODO frequency regulator
|
||||||
|
wRecChange .+= 0.0001 .* ((firingTargetFrequency - (firingCounter./timeStep)) ./ timeStep) .*
|
||||||
|
eta .* eRec
|
||||||
|
|
||||||
# reset epsilonRec
|
# reset epsilonRec
|
||||||
epsilonRec .= 0
|
epsilonRec .= 0
|
||||||
end
|
end
|
||||||
|
|
||||||
function alifComputeParamsChange!( phi::CuArray,
|
function alifComputeParamsChange!( timeStep::CuArray,
|
||||||
|
phi::CuArray,
|
||||||
epsilonRec::CuArray,
|
epsilonRec::CuArray,
|
||||||
eta::CuArray,
|
eta::CuArray,
|
||||||
eRec::CuArray,
|
eRec::CuArray,
|
||||||
@@ -125,6 +130,8 @@ function alifComputeParamsChange!( phi::CuArray,
|
|||||||
wRecChange .+= (-eta .* nError .* eRec)
|
wRecChange .+= (-eta .* nError .* eRec)
|
||||||
|
|
||||||
#TODO frequency regulator
|
#TODO frequency regulator
|
||||||
|
wRecChange .+= 0.0001 .* ((firingTargetFrequency - (firingCounter./timeStep)) ./ timeStep) .*
|
||||||
|
eta .* eRec
|
||||||
|
|
||||||
# reset epsilonRec
|
# reset epsilonRec
|
||||||
epsilonRec .= 0
|
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_subscription = (GeneralUtils.isNotEqual.(kfn.lif_wRec, 0)) |> device
|
||||||
|
|
||||||
kfn.lif_firingCounter = (similar(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_arrayProjection4d = (similar(kfn.lif_wRec) .= 1) |> device
|
||||||
kfn.lif_recSignal = (similar(kfn.lif_wRec) .= 0) |> 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_subscription = (GeneralUtils.isNotEqual.(kfn.alif_wRec, 0)) |> device
|
||||||
|
|
||||||
kfn.alif_firingCounter = (similar(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_arrayProjection4d = (similar(kfn.alif_wRec) .= 1) |> device
|
||||||
kfn.alif_recSignal = (similar(kfn.alif_wRec) .= 0) |> device
|
kfn.alif_recSignal = (similar(kfn.alif_wRec) .= 0) |> device
|
||||||
|
|||||||
Reference in New Issue
Block a user