add variables

This commit is contained in:
ton
2023-08-10 13:41:39 +07:00
parent bbda12bae8
commit 9c57af4cd1
3 changed files with 22 additions and 3 deletions

View File

@@ -15,16 +15,19 @@ function (kfn::kfn_1)(input::AbstractArray)
kfn.timeStep .+= 1
#TODO time step forward
# what to do at the start of learning round
if view(kfn.learningStage, 1)[1] == 1
# reset learning params
kfn.lif_vt .= 0
kfn.lif_wRecChange .= 0
kfn.lif_epsilonRec .= 0
kfn.lif_firingCounter .= 0
kfn.alif_vt .= 0
kfn.alif_epsilonRec .= 0
kfn.alif_epsilonRecA .= 0
kfn.alif_wRecChange .= 0
kfn.alif_firingCounter .= 0
kfn.on_vt .= 0
kfn.on_epsilonRec .= 0

View File

@@ -16,7 +16,9 @@ function compute_paramsChange!(kfn::kfn_1, modelError, outputError)
kfn.lif_eRec,
kfn.lif_wRec,
kfn.lif_wRecChange,
kfn.on_wOut,
kfn.on_wOut,
kfn.lif_firingCounter,
kfn.lif_firingTargetFrequency,
kfn.lif_arrayProjection4d,
kfn.lif_error,
modelError,
@@ -30,7 +32,9 @@ function compute_paramsChange!(kfn::kfn_1, modelError, outputError)
kfn.alif_eRec,
kfn.alif_wRec,
kfn.alif_wRecChange,
kfn.on_wOut,
kfn.on_wOut,
kfn.alif_firingCounter,
kfn.alif_firingTargetFrequency,
kfn.alif_arrayProjection4d,
kfn.alif_error,
modelError,
@@ -59,6 +63,8 @@ function lifComputeParamsChange!( phi::CuArray,
wRec::CuArray,
wRecChange::CuArray,
wOut::CuArray,
firingCounter::CuArray,
firingTargetFrequency::CuArray,
arrayProjection4d::CuArray,
nError::CuArray,
modelError::CuArray,
@@ -81,6 +87,8 @@ function lifComputeParamsChange!( phi::CuArray,
eRec .= phi .* epsilonRec
wRecChange .+= (-eta .* nError .* eRec)
#TODO frequency regulator
# reset epsilonRec
epsilonRec .= 0
end
@@ -92,6 +100,8 @@ function alifComputeParamsChange!( phi::CuArray,
wRec::CuArray,
wRecChange::CuArray,
wOut::CuArray,
firingCounter::CuArray,
firingTargetFrequency::CuArray,
arrayProjection4d::CuArray,
nError::CuArray,
modelError::CuArray,
@@ -114,6 +124,8 @@ function alifComputeParamsChange!( phi::CuArray,
eRec .= phi .* (epsilonRec .- (beta .* epsilonRecA)) # use eq. 25
wRecChange .+= (-eta .* nError .* eRec)
#TODO frequency regulator
# reset epsilonRec
epsilonRec .= 0
epsilonRecA .= 0

View File

@@ -54,6 +54,7 @@ Base.@kwdef mutable struct kfn_1 <: knowledgeFn
lif_subscription::Union{AbstractArray, Nothing} = nothing
lif_firingCounter::Union{AbstractArray, Nothing} = nothing
lif_firingTargetFrequency::Union{AbstractArray, Nothing} = nothing
# pre-allocation array
lif_arrayProjection4d::Union{AbstractArray, Nothing} = nothing # use to project 3d array to 4d
@@ -90,6 +91,7 @@ Base.@kwdef mutable struct kfn_1 <: knowledgeFn
alif_subscription::Union{AbstractArray, Nothing} = nothing
alif_firingCounter::Union{AbstractArray, Nothing} = nothing
alif_firingTargetFrequency::Union{AbstractArray, Nothing} = nothing
# pre-allocation array
alif_arrayProjection4d::Union{AbstractArray, Nothing} = nothing # use to project 3d array to 4d
@@ -215,6 +217,7 @@ 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
kfn.lif_arrayProjection4d = (similar(kfn.lif_wRec) .= 1) |> device
kfn.lif_recSignal = (similar(kfn.lif_wRec) .= 0) |> device
@@ -262,6 +265,7 @@ 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
kfn.alif_arrayProjection4d = (similar(kfn.alif_wRec) .= 1) |> device
kfn.alif_recSignal = (similar(kfn.alif_wRec) .= 0) |> device