From fc676d1ccdaa3c9ffa69cebb31c5eeff76a9dc25 Mon Sep 17 00:00:00 2001 From: ton Date: Tue, 11 Jul 2023 09:26:14 +0700 Subject: [PATCH] building forward() --- src/type.jl | 55 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/src/type.jl b/src/type.jl index 361be3d..af5feb7 100644 --- a/src/type.jl +++ b/src/type.jl @@ -26,8 +26,10 @@ Base.@kwdef mutable struct kfn_1 <: knowledgeFn z_i_t0::Union{AbstractArray, Nothing} = nothing lif_w::Union{AbstractArray, Nothing} = nothing + lif_recSignal::Union{AbstractArray, Nothing} = nothing alif_w::Union{AbstractArray, Nothing} = nothing + alif_recSignal::Union{AbstractArray, Nothing} = nothing end # outer constructor @@ -35,35 +37,42 @@ function kfn_1(params::Dict) kfn = kfn_1() kfn.params = params # initialize activation matrix - row, col = kfn.params[:inputPort][:noise][:numbers] - row += kfn.params[:inputPort][:signal][:numbers][1] + row, col, batch = kfn.params[:inputPort][:signal][:numbers] # z-axis represent signal batch number + row += kfn.params[:inputPort][:noise][:numbers][1] col += kfn.params[:inputPort][:signal][:numbers][2] col += kfn.params[:computeNeuron][:lif][:numbers][2] col += kfn.params[:computeNeuron][:alif][:numbers][2] - kfn.z_i_t1 = zeros(row, col, 1) - kfn.z_i_t0 = zeros(row, col, 1) + kfn.z_i_t1 = zeros(row, col, batch) + kfn.z_i_t0 = zeros(row, col, batch) - kfn.lif_w = zeros(row, col, row*col) - kfn.alif_w = zeros(row, col, row*col) + # LIF + z = kfn.params[:computeNeuron][:lif][:numbers][1] * kfn.params[:computeNeuron][:lif][:numbers][2] + kfn.lif_w = zeros(row, col, z) # matrix z-axis represent each neurons + kfn.lif_recSignal = zeros(row, col, z, batch) + + # ALIF + z = kfn.params[:computeNeuron][:alif][:numbers][1] * kfn.params[:computeNeuron][:alif][:numbers][2] + kfn.alif_w = zeros(row, col, z) + kfn.alif_recSignal = zeros(row, col, z, batch) # lif subscription - row, col, z = size(kfn.lif_w) # row*col is synaptic subscribe weight for each neuron in z + row, col, _ = size(kfn.lif_w) # row*col is synaptic subscribe weight for each neuron in z-axis synapticConnectionPercent = kfn.params[:computeNeuron][:lif][:params][:synapticConnectionPercent] - synapticConnection = Int(floor(z*synapticConnectionPercent/100)) + synapticConnection = Int(floor(row*col * synapticConnectionPercent/100)) for slice in eachslice(kfn.lif_w, dims=3) - pool = shuffle!([1:z...])[1:synapticConnection] + pool = shuffle!([1:row*col...])[1:synapticConnection] for i in pool slice[i] = randn()/10 end end # alif subscription - row, col, z = size(kfn.alif_w) # row*col is synaptic subscribe weight for each neuron in z + row, col, _ = size(kfn.alif_w) # row*col is synaptic subscribe weight for each neuron in z-axis synapticConnectionPercent = kfn.params[:computeNeuron][:alif][:params][:synapticConnectionPercent] - synapticConnection = Int(floor(z*synapticConnectionPercent/100)) + synapticConnection = Int(floor(row*col * synapticConnectionPercent/100)) for slice in eachslice(kfn.alif_w, dims=3) - pool = shuffle!([1:z...])[1:synapticConnection] + pool = shuffle!([1:row*col...])[1:synapticConnection] for i in pool slice[i] = randn()/10 end @@ -87,19 +96,23 @@ end function (kfn::kfn_1)(input::AbstractArray) kfn.timeStep .+= 1 + # time step forward + + + # row, col = size(input) # if input is a 2D matrix - println(">>> 5 ", size(input)) - println(">>> 6 ", size(kfn.z_i_t1)) + println(">>> 1 ", size(input)) + println(">>> 2 ", size(kfn.z_i_t1)) - #WORKING multiply input with kfn.z_i_t1 may be using cartesian coordinates - println(">>> 7 ", view(kfn.z_i_t1, :, 1, :)) - view(kfn.z_i_t1, :, 1) .= input - println(">>> 8 ", kfn.z_i_t1[:, 1]) + # multiply input with kfn.z_i_t1 may be using cartesian coordinates + GeneralUtils.cartesianAssign!(kfn.z_i_t1, input) + println(">>> 3 ", sum(kfn.z_i_t1)) + println(">>> 4 ", size(kfn.lif_recSignal)) + println(">>> 5 ", size(kfn.lif_w)) + kfn.lif_recSignal .= GeneralUtils.batchMatEleMul(kfn.z_i_t1, kfn.lif_w) + kfn.alif_recSignal .= GeneralUtils.batchMatEleMul(kfn.z_i_t1, kfn.alif_w) - # multiply kfn.z_i_t1 with kfn.lif_w - r = GeneralUtils.batchMatEleMul(kfn.z_i_t1, kfn.lif_w) - println(size(r))