building forward()
This commit is contained in:
55
src/type.jl
55
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))
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user