add variables
This commit is contained in:
@@ -15,16 +15,19 @@ function (kfn::kfn_1)(input::AbstractArray)
|
|||||||
|
|
||||||
kfn.timeStep .+= 1
|
kfn.timeStep .+= 1
|
||||||
|
|
||||||
#TODO time step forward
|
# what to do at the start of learning round
|
||||||
if view(kfn.learningStage, 1)[1] == 1
|
if view(kfn.learningStage, 1)[1] == 1
|
||||||
# reset learning params
|
# reset learning params
|
||||||
kfn.lif_vt .= 0
|
kfn.lif_vt .= 0
|
||||||
kfn.lif_wRecChange .= 0
|
kfn.lif_wRecChange .= 0
|
||||||
kfn.lif_epsilonRec .= 0
|
kfn.lif_epsilonRec .= 0
|
||||||
|
kfn.lif_firingCounter .= 0
|
||||||
|
|
||||||
kfn.alif_vt .= 0
|
kfn.alif_vt .= 0
|
||||||
kfn.alif_epsilonRec .= 0
|
kfn.alif_epsilonRec .= 0
|
||||||
|
kfn.alif_epsilonRecA .= 0
|
||||||
kfn.alif_wRecChange .= 0
|
kfn.alif_wRecChange .= 0
|
||||||
|
kfn.alif_firingCounter .= 0
|
||||||
|
|
||||||
kfn.on_vt .= 0
|
kfn.on_vt .= 0
|
||||||
kfn.on_epsilonRec .= 0
|
kfn.on_epsilonRec .= 0
|
||||||
|
|||||||
12
src/learn.jl
12
src/learn.jl
@@ -17,6 +17,8 @@ function compute_paramsChange!(kfn::kfn_1, modelError, outputError)
|
|||||||
kfn.lif_wRec,
|
kfn.lif_wRec,
|
||||||
kfn.lif_wRecChange,
|
kfn.lif_wRecChange,
|
||||||
kfn.on_wOut,
|
kfn.on_wOut,
|
||||||
|
kfn.lif_firingCounter,
|
||||||
|
kfn.lif_firingTargetFrequency,
|
||||||
kfn.lif_arrayProjection4d,
|
kfn.lif_arrayProjection4d,
|
||||||
kfn.lif_error,
|
kfn.lif_error,
|
||||||
modelError,
|
modelError,
|
||||||
@@ -31,6 +33,8 @@ function compute_paramsChange!(kfn::kfn_1, modelError, outputError)
|
|||||||
kfn.alif_wRec,
|
kfn.alif_wRec,
|
||||||
kfn.alif_wRecChange,
|
kfn.alif_wRecChange,
|
||||||
kfn.on_wOut,
|
kfn.on_wOut,
|
||||||
|
kfn.alif_firingCounter,
|
||||||
|
kfn.alif_firingTargetFrequency,
|
||||||
kfn.alif_arrayProjection4d,
|
kfn.alif_arrayProjection4d,
|
||||||
kfn.alif_error,
|
kfn.alif_error,
|
||||||
modelError,
|
modelError,
|
||||||
@@ -59,6 +63,8 @@ function lifComputeParamsChange!( phi::CuArray,
|
|||||||
wRec::CuArray,
|
wRec::CuArray,
|
||||||
wRecChange::CuArray,
|
wRecChange::CuArray,
|
||||||
wOut::CuArray,
|
wOut::CuArray,
|
||||||
|
firingCounter::CuArray,
|
||||||
|
firingTargetFrequency::CuArray,
|
||||||
arrayProjection4d::CuArray,
|
arrayProjection4d::CuArray,
|
||||||
nError::CuArray,
|
nError::CuArray,
|
||||||
modelError::CuArray,
|
modelError::CuArray,
|
||||||
@@ -81,6 +87,8 @@ function lifComputeParamsChange!( phi::CuArray,
|
|||||||
eRec .= phi .* epsilonRec
|
eRec .= phi .* epsilonRec
|
||||||
wRecChange .+= (-eta .* nError .* eRec)
|
wRecChange .+= (-eta .* nError .* eRec)
|
||||||
|
|
||||||
|
#TODO frequency regulator
|
||||||
|
|
||||||
# reset epsilonRec
|
# reset epsilonRec
|
||||||
epsilonRec .= 0
|
epsilonRec .= 0
|
||||||
end
|
end
|
||||||
@@ -92,6 +100,8 @@ function alifComputeParamsChange!( phi::CuArray,
|
|||||||
wRec::CuArray,
|
wRec::CuArray,
|
||||||
wRecChange::CuArray,
|
wRecChange::CuArray,
|
||||||
wOut::CuArray,
|
wOut::CuArray,
|
||||||
|
firingCounter::CuArray,
|
||||||
|
firingTargetFrequency::CuArray,
|
||||||
arrayProjection4d::CuArray,
|
arrayProjection4d::CuArray,
|
||||||
nError::CuArray,
|
nError::CuArray,
|
||||||
modelError::CuArray,
|
modelError::CuArray,
|
||||||
@@ -114,6 +124,8 @@ function alifComputeParamsChange!( phi::CuArray,
|
|||||||
eRec .= phi .* (epsilonRec .- (beta .* epsilonRecA)) # use eq. 25
|
eRec .= phi .* (epsilonRec .- (beta .* epsilonRecA)) # use eq. 25
|
||||||
wRecChange .+= (-eta .* nError .* eRec)
|
wRecChange .+= (-eta .* nError .* eRec)
|
||||||
|
|
||||||
|
#TODO frequency regulator
|
||||||
|
|
||||||
# reset epsilonRec
|
# reset epsilonRec
|
||||||
epsilonRec .= 0
|
epsilonRec .= 0
|
||||||
epsilonRecA .= 0
|
epsilonRecA .= 0
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ Base.@kwdef mutable struct kfn_1 <: knowledgeFn
|
|||||||
lif_subscription::Union{AbstractArray, Nothing} = nothing
|
lif_subscription::Union{AbstractArray, Nothing} = nothing
|
||||||
|
|
||||||
lif_firingCounter::Union{AbstractArray, Nothing} = nothing
|
lif_firingCounter::Union{AbstractArray, Nothing} = nothing
|
||||||
|
lif_firingTargetFrequency::Union{AbstractArray, Nothing} = nothing
|
||||||
|
|
||||||
# pre-allocation array
|
# pre-allocation array
|
||||||
lif_arrayProjection4d::Union{AbstractArray, Nothing} = nothing # use to project 3d array to 4d
|
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_subscription::Union{AbstractArray, Nothing} = nothing
|
||||||
|
|
||||||
alif_firingCounter::Union{AbstractArray, Nothing} = nothing
|
alif_firingCounter::Union{AbstractArray, Nothing} = nothing
|
||||||
|
alif_firingTargetFrequency::Union{AbstractArray, Nothing} = nothing
|
||||||
|
|
||||||
# pre-allocation array
|
# pre-allocation array
|
||||||
alif_arrayProjection4d::Union{AbstractArray, Nothing} = nothing # use to project 3d array to 4d
|
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_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
|
||||||
|
|
||||||
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
|
||||||
@@ -262,6 +265,7 @@ 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
|
||||||
|
|
||||||
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