refractoring
This commit is contained in:
83
src/readout.jl
Normal file
83
src/readout.jl
Normal file
@@ -0,0 +1,83 @@
|
||||
module readout
|
||||
|
||||
using Flux.Optimise: apply!
|
||||
|
||||
using Statistics, Flux, Random, LinearAlgebra
|
||||
using GeneralUtils
|
||||
using ..types, ..readout, ..learn, ..forward
|
||||
|
||||
export readout!
|
||||
|
||||
#------------------------------------------------------------------------------------------------100
|
||||
|
||||
function readout!(kfn::knowledgeFn; correctAnswer=nothing) # correctAnswer=nothing use for inference
|
||||
# clear output to start reading
|
||||
# kfn.on_out_t0 *= 0.0 #FIXME should I clear it before RSNN readout?
|
||||
respondCount = zeros(length(kfn.on_out_t0))
|
||||
|
||||
# prepare signal used to read RSNN
|
||||
readoutSignal = zeros(length(kfn.passthrough_zt0))
|
||||
readoutSignal[1] = 1
|
||||
readoutSignal[end] = 1
|
||||
|
||||
lastKfnTimeStamp = kfn.timeStamp[1]
|
||||
for t in 1:kfn.on_tauOut[1]
|
||||
# println("t $t")
|
||||
tick = lastKfnTimeStamp + t
|
||||
if t == kfn.on_tauOut[1]
|
||||
println("")
|
||||
end
|
||||
if kfn.learningStage[1] == 0 # RSNN is in inference mode, do not change marker
|
||||
# skip
|
||||
else # RSNN is in learning mode, assign marker for commiting wChange at the end of readout window.
|
||||
marker = t == kfn.on_tauOut[1] ? 4 : kfn.learningStage[1]
|
||||
end
|
||||
|
||||
# RSNN forward ----------
|
||||
singleTimeReadout, on_out_t0, softmaxRespond = kfn(readoutSignal, tick, marker,
|
||||
correctAnswer=correctAnswer)
|
||||
_, _, respondPosition = Utils.findMax(softmaxRespond)
|
||||
respondCount += respondPosition
|
||||
|
||||
if correctAnswer !== nothing
|
||||
kfn.kfnError = [Flux.logitcrossentropy(on_out_t0, correctAnswer)]
|
||||
learn!(kfn)
|
||||
end
|
||||
end
|
||||
|
||||
_, readout, _ = Utils.findMax(respondCount/kfn.on_tauOut[1])
|
||||
|
||||
return readout, kfn.on_out_t0
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
end # module
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user