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
|
z_i_t0::Union{AbstractArray, Nothing} = nothing
|
||||||
|
|
||||||
lif_w::Union{AbstractArray, Nothing} = nothing
|
lif_w::Union{AbstractArray, Nothing} = nothing
|
||||||
|
lif_recSignal::Union{AbstractArray, Nothing} = nothing
|
||||||
|
|
||||||
alif_w::Union{AbstractArray, Nothing} = nothing
|
alif_w::Union{AbstractArray, Nothing} = nothing
|
||||||
|
alif_recSignal::Union{AbstractArray, Nothing} = nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
# outer constructor
|
# outer constructor
|
||||||
@@ -35,35 +37,42 @@ function kfn_1(params::Dict)
|
|||||||
kfn = kfn_1()
|
kfn = kfn_1()
|
||||||
kfn.params = params
|
kfn.params = params
|
||||||
# initialize activation matrix
|
# initialize activation matrix
|
||||||
row, col = kfn.params[:inputPort][:noise][:numbers]
|
row, col, batch = kfn.params[:inputPort][:signal][:numbers] # z-axis represent signal batch number
|
||||||
row += kfn.params[:inputPort][:signal][:numbers][1]
|
row += kfn.params[:inputPort][:noise][:numbers][1]
|
||||||
col += kfn.params[:inputPort][:signal][:numbers][2]
|
col += kfn.params[:inputPort][:signal][:numbers][2]
|
||||||
col += kfn.params[:computeNeuron][:lif][:numbers][2]
|
col += kfn.params[:computeNeuron][:lif][:numbers][2]
|
||||||
col += kfn.params[:computeNeuron][:alif][:numbers][2]
|
col += kfn.params[:computeNeuron][:alif][:numbers][2]
|
||||||
|
|
||||||
kfn.z_i_t1 = zeros(row, col, 1)
|
kfn.z_i_t1 = zeros(row, col, batch)
|
||||||
kfn.z_i_t0 = zeros(row, col, 1)
|
kfn.z_i_t0 = zeros(row, col, batch)
|
||||||
|
|
||||||
kfn.lif_w = zeros(row, col, row*col)
|
# LIF
|
||||||
kfn.alif_w = zeros(row, col, row*col)
|
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
|
# 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]
|
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)
|
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
|
for i in pool
|
||||||
slice[i] = randn()/10
|
slice[i] = randn()/10
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# alif subscription
|
# 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]
|
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)
|
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
|
for i in pool
|
||||||
slice[i] = randn()/10
|
slice[i] = randn()/10
|
||||||
end
|
end
|
||||||
@@ -87,19 +96,23 @@ end
|
|||||||
function (kfn::kfn_1)(input::AbstractArray)
|
function (kfn::kfn_1)(input::AbstractArray)
|
||||||
kfn.timeStep .+= 1
|
kfn.timeStep .+= 1
|
||||||
|
|
||||||
|
# time step forward
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# row, col = size(input) # if input is a 2D matrix
|
# row, col = size(input) # if input is a 2D matrix
|
||||||
println(">>> 5 ", size(input))
|
println(">>> 1 ", size(input))
|
||||||
println(">>> 6 ", size(kfn.z_i_t1))
|
println(">>> 2 ", size(kfn.z_i_t1))
|
||||||
|
|
||||||
#WORKING multiply input with kfn.z_i_t1 may be using cartesian coordinates
|
# multiply input with kfn.z_i_t1 may be using cartesian coordinates
|
||||||
println(">>> 7 ", view(kfn.z_i_t1, :, 1, :))
|
GeneralUtils.cartesianAssign!(kfn.z_i_t1, input)
|
||||||
view(kfn.z_i_t1, :, 1) .= input
|
println(">>> 3 ", sum(kfn.z_i_t1))
|
||||||
println(">>> 8 ", kfn.z_i_t1[:, 1])
|
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