| Algorithm A1: Synthesis and training of the correlation neuron |
|
Initiate C-, C+, AUCMAX, b //Select an array Ψ of random pairs of features (not involved in any neuron) //with a cross-correlation level of more than C- but less than C+ for ι from 1 to η do Ψ[ι] = GetRandomUniqueFeaturesPair(C-; C+) end p = 0.9 //Calculation of an array W of neurons’ weight coefficients using Formula (18) //Calculation of meta-features is performed according to Formula (12) for ι from 1 to η do W[ι] = GetSynapsesWeights(Ψ[ι], p) end //Calculation of arrays YG and YI of neuron responses //to «Genuine» and «Impostors» training images according to Formula (17) for k from 1 to KG do YG[k] = GetNeuronResponse(āG,k, Ψ, W, p) end for k from 1 to KI do YI[k] = GetNeuronResponse(āI,k, Ψ, W, p) end ξG = GetMathematicalExpectation(YG) ςG = GetStandardDeviation(YG, ξG) ξI = GetMathematicalExpectation(YI) ςI = GetStandardDeviation(YI, ξI) yImin = ξI − 4ςI yImax = ξI + 4ςI ΔyG = 4ςG yGmin = ξG − ΔyG yGmax = ξG + ΔyG FGmax = F(yGmax)//Formula (21) FGmin = F(yGmin)//Formula (21) ΔFG = FGmax − FGmin if AUCMAX > AUC(ՓG(y), ՓI(y)) then//Formula (22) do if ΔFG < 0.4 then do while ΔFG < 0.1 do ΔyG = 1.05ΔyG yGmin = ξG − ΔyG yGmax = ξG + ΔyG FGmax = F(yGmax)//Formula (21) FGmin = F(yGmin)//Formula (21) ΔFG = FGmax-FGmin end if FGmin < 0.1 then if 1 − FGmax > 0.6 then do ɸG = 3 Tleft = yGmax ΔT = (yImax − yGmax)/4 Tmiddle = Tleft + ΔT Tright = Tmiddle + ΔT H = GetHashTransformationNumber(ɸG, b) return {H, Ψ, W, Tleft, Tmiddle, Tright} end else return NULL//Neuron is not trained and must be removed else if FGmin > 0.4 then if 1 − FGmax < 0.1 then if 1 − FGmin < 0.4 then do ɸG = 0 ΔT = (yGmin − yImin)/4 Tleft = yGmin − 2ΔT Tmiddle = yGmin − ΔT Tright = yGmin H = GetHashTransformationNumber(ɸG, b) return {H, Ψ, W, Tleft, Tmiddle, Tright} end else return NULL//Neuron is not trained and must be removed else do ɸG = 1 ΔT = (yGmin − yImin)/3 Tleft = yGmin − ΔT Tmiddle = yGmin Tright = yGmax H = GetHashTransformationNumber(ɸG, b) return {H, Ψ, W, Tleft, Tmiddle, Tright} end else do ɸG = 2 ΔT = (yImax-yGmax)/3 Tleft = yGmin Tmiddle = yGmax Tright = Tmiddle + ΔT H = GetHashTransformationNumber(ɸG, b) return {H, Ψ, W, Tleft, Tmiddle, Tright} end end else return NULL//Neuron is not trained and must be removed end else return NULL//Neuron is not trained and must be removed |