Пример #1
0
        /// <inheritdoc/>
        public void Update(double activation, double normalizedActivation, bool spike)
        {
            PredictorActivationLinWAvgSettings cfg = (PredictorActivationLinWAvgSettings)Cfg;

            if (cfg.Window == PredictorActivationLinWAvgSettings.NAWindowNum)
            {
                ++_continuousWeight;
                _continuousAvg.AddSample(activation, _continuousWeight);
            }
            return;
        }
Пример #2
0
 /// <summary>
 /// Computes the composite output of the cluster.
 /// </summary>
 private double[] ComputeCompositeOutput(List <Tuple <int, double[]> > memberNetOutputs)
 {
     if (Output == TNRNet.OutputType.Real)
     {
         //Real output
         double[] output = new double[NumOfOutputs];
         for (int outIdx = 0; outIdx < NumOfOutputs; outIdx++)
         {
             //Compute weighted average of members single output
             WeightedAvg wAvg = new WeightedAvg();
             for (int i = 0; i < memberNetOutputs.Count; i++)
             {
                 //Add sub-result to weighted average
                 wAvg.AddSample(memberNetOutputs[i].Item2[outIdx], _memberNetWeights[i]);
             }
             //Store averaged output
             output[outIdx] = wAvg.Result;
         }
         //Return averaged outputs
         return(output);
     }
     else
     {
         //Probabilistic or SingleBool output
         int      numOfOutputProbabilities = memberNetOutputs[0].Item2.Length;
         double[] outProbabilities         = new double[numOfOutputProbabilities];
         for (int pIdx = 0; pIdx < numOfOutputProbabilities; pIdx++)
         {
             double[] memberPs = new double[NumOfMembers];
             for (int i = 0; i < NumOfMembers; i++)
             {
                 memberPs[i] = PMixer.ProbabilityRange.Rescale(memberNetOutputs[i].Item2[pIdx], OutputDataRange);
             }
             //Compute members mixed probability
             outProbabilities[pIdx] = PMixer.MixP(memberPs, _memberNetWeights);
         }
         if (numOfOutputProbabilities > 1)
         {
             outProbabilities.ScaleToNewSum(1d);
         }
         //Rescale probabilities to output range
         for (int pIdx = 0; pIdx < numOfOutputProbabilities; pIdx++)
         {
             outProbabilities[pIdx] = OutputDataRange.Rescale(outProbabilities[pIdx], PMixer.ProbabilityRange);
         }
         return(outProbabilities);
     }
 }