add normalizePeak!

This commit is contained in:
2023-05-17 13:20:03 +07:00
parent b7c674916e
commit abd69c9dae
3 changed files with 19 additions and 5 deletions

View File

@@ -86,6 +86,9 @@ function learn!(kfn::kfn_1, correctAnswer::AbstractVector)
nonFlipedSign = isequal.(n.subExInType, wSign) # 1 not fliped, 0 fliped nonFlipedSign = isequal.(n.subExInType, wSign) # 1 not fliped, 0 fliped
LinearAlgebra.normalize!(n.wRec, 1) LinearAlgebra.normalize!(n.wRec, 1)
n.wRec .*= nonFlipedSign # set weight that fliped sign to 0 for random new connection n.wRec .*= nonFlipedSign # set weight that fliped sign to 0 for random new connection
# normalize wRec peak to prevent input signal overwhelming neuron
normalizePeak!(n.wRec, 2)
synapticConnStrength!(n) synapticConnStrength!(n)
#TODO neuroplasticity #TODO neuroplasticity

View File

@@ -4,7 +4,7 @@ using Flux.Optimise: apply!
export calculate_α, calculate_ρ, calculate_k, timestep_forward!, init_neuron, no_negative!, export calculate_α, calculate_ρ, calculate_k, timestep_forward!, init_neuron, no_negative!,
precision, calculate_w_change!, store_knowledgefn_error!, interneurons_adjustment!, precision, calculate_w_change!, store_knowledgefn_error!, interneurons_adjustment!,
reset_z_t!, resetLearningParams!, reset_learning_history_params!, reset_epsilonRec!, reset_z_t!, resetLearningParams!, reset_learning_history_params!, reset_epsilonRec!,
reset_epsilonRecA!, synapticConnStrength!, reset_epsilonRecA!, synapticConnStrength!, normalizePeak!,
firing_rate_error!, firing_rate_regulator!, update_Bn!, cal_firing_reg!, firing_rate_error!, firing_rate_regulator!, update_Bn!, cal_firing_reg!,
neuroplasticity!, shakeup!, reset_learning_no_wchange!, adjust_internal_learning_rate!, neuroplasticity!, shakeup!, reset_learning_no_wchange!, adjust_internal_learning_rate!,
gradient_withloss gradient_withloss
@@ -317,7 +317,18 @@ function neuroplasticity!(n::compute_neuron, firedNeurons::Vector)
end end
end end
""" normalize a part of a vector centering at a vector's maximum value along with nearby value
within its radius. radius must be odd number
"""
function normalizePeak!(v::Vector, radius::Integer=2)
peak = findall(isequal.(n.wRec, maximum(n.wRec)))[1]
upindex = peak - radius
upindex = upindex < 1 ? 1 : upindex
downindex = peak + radius
downindex = downindex > length(v) ? length(v) : downindex
subvector = view(v, upindex:downindex)
normalize!(subvector, 1)
end

View File

@@ -630,7 +630,7 @@ function init_neuron!(id::Int64, n::lif_neuron, n_params::Dict, kfnParams::Dict)
n.synapticStrength = rand(-5:0.1:-3, length(n.subscriptionList)) n.synapticStrength = rand(-5:0.1:-3, length(n.subscriptionList))
n.epsilonRec = zeros(length(n.subscriptionList)) n.epsilonRec = zeros(length(n.subscriptionList))
n.wRec = LinearAlgebra.normalize!(rand(length(n.subscriptionList)), 1) n.wRec = rand(length(n.subscriptionList))
n.wRecChange = zeros(length(n.subscriptionList)) n.wRecChange = zeros(length(n.subscriptionList))
n.alpha = calculate_α(n) n.alpha = calculate_α(n)
end end
@@ -649,7 +649,7 @@ function init_neuron!(id::Int64, n::alif_neuron, n_params::Dict,
n.synapticStrength = rand(-5:0.1:-3, length(n.subscriptionList)) n.synapticStrength = rand(-5:0.1:-3, length(n.subscriptionList))
n.epsilonRec = zeros(length(n.subscriptionList)) n.epsilonRec = zeros(length(n.subscriptionList))
n.wRec = LinearAlgebra.normalize!(rand(length(n.subscriptionList)), 1) n.wRec = rand(length(n.subscriptionList))
n.wRecChange = zeros(length(n.subscriptionList)) n.wRecChange = zeros(length(n.subscriptionList))
# the more time has passed from the last time neuron was activated, the more # the more time has passed from the last time neuron was activated, the more
@@ -671,7 +671,7 @@ function init_neuron!(id::Int64, n::linear_neuron, n_params::Dict, kfnParams::Di
n.synapticStrength = rand(-5:0.1:-3, length(n.subscriptionList)) n.synapticStrength = rand(-5:0.1:-3, length(n.subscriptionList))
n.epsilonRec = zeros(length(n.subscriptionList)) n.epsilonRec = zeros(length(n.subscriptionList))
n.wRec = LinearAlgebra.normalize!(rand(length(n.subscriptionList)), 1) n.wRec = rand(length(n.subscriptionList))
n.wRecChange = zeros(length(n.subscriptionList)) n.wRecChange = zeros(length(n.subscriptionList))
n.alpha = calculate_k(n) n.alpha = calculate_k(n)
end end