Esempio n. 1
0
 /// <summary>
 /// Creates an initialized instance.
 /// </summary>
 /// <param name="regime">The way of input spikes coding.</param>
 /// <param name="coderCfgCollection">The A2S coder configurations.</param>
 public InputSpikesCoderSettings(InputEncoder.InputSpikesCoding regime,
                                 params RCNetBaseSettings[] coderCfgCollection
                                 )
     : this(regime, new List<RCNetBaseSettings>(coderCfgCollection))
 {
     return;
 }
Esempio n. 2
0
 //Constructors
 /// <summary>
 /// Creates an initialized instance.
 /// </summary>
 /// <param name="regime">The way of input spikes coding.</param>
 /// <param name="coderCfgCollection">The collection of the A2S coder configurations.</param>
 public InputSpikesCoderSettings(InputEncoder.InputSpikesCoding regime = DefaultRegime,
                                 List<RCNetBaseSettings> coderCfgCollection = DefaultCoderCfgCollection
                                 )
 {
     Regime = regime;
     CoderCfgCollection = new List<RCNetBaseSettings>();
     if (Regime != InputEncoder.InputSpikesCoding.Forbidden)
     {
         if (coderCfgCollection != null && coderCfgCollection.Count > 0)
         {
             foreach (RCNetBaseSettings coderSettings in coderCfgCollection)
             {
                 CoderCfgCollection.Add(coderSettings.DeepClone());
             }
         }
     }
     Check();
     return;
 }
Esempio n. 3
0
        //Methods
        /// <summary>
        /// Runs the example code.
        /// </summary>
        public void Run(InputEncoder.InputSpikesCoding spikesCoding)
        {
            //Create StateMachine configuration
            //Simplified input configuration and homogenous excitability
            InputEncoderSettings           inputCfg;
            HomogenousExcitabilitySettings homogenousExcitability;

            switch (spikesCoding)
            {
            /*
             * Horizontal coding.
             */
            case InputEncoder.InputSpikesCoding.Horizontal:
                inputCfg = StateMachineDesigner.CreateInputCfg(new FeedingPatternedSettings(1, NeuralPreprocessor.BidirProcessing.Continuous, RCNet.Neural.Data.InputPattern.VariablesSchema.Groupped, new UnificationSettings(false, false)),
                                                                                                                                    //136 spiking input neurons per input field - coding at once
                                                               new InputSpikesCoderSettings(InputEncoder.InputSpikesCoding.Horizontal,
                                                                                            new A2SCoderSignalStrengthSettings(8),  //8 neurons (spike-train length = 1)
                                                                                            new A2SCoderUpDirArrowsSettings(8, 8),  //64 neurons (spike-train length = 1)
                                                                                            new A2SCoderDownDirArrowsSettings(8, 8) //64 neurons (spike-train length = 1)
                                                                                            ),
                                                               true,                                                                //Route the input pattern as the predictors to a readout layer
                                                               new ExternalFieldSettings("coord_abcissa", new RealFeatureFilterSettings(), true),
                                                               new ExternalFieldSettings("coord_ordinate", new RealFeatureFilterSettings(), true)
                                                               );
                homogenousExcitability = new HomogenousExcitabilitySettings(1d, 0.7d, 0.2d);
                break;

            /*
             * Vertical coding.
             */
            case InputEncoder.InputSpikesCoding.Vertical:
                inputCfg = StateMachineDesigner.CreateInputCfg(new FeedingPatternedSettings(1, NeuralPreprocessor.BidirProcessing.Continuous, RCNet.Neural.Data.InputPattern.VariablesSchema.Groupped),
                                                                                                                                     //17 spiking input neurons per input field- coding in 10 cycles
                                                               new InputSpikesCoderSettings(InputEncoder.InputSpikesCoding.Vertical,
                                                                                            new A2SCoderSignalStrengthSettings(10),  //1 neuron (spike-train length = 10)
                                                                                            new A2SCoderUpDirArrowsSettings(8, 10),  //8 neurons (spike-train length = 10)
                                                                                            new A2SCoderDownDirArrowsSettings(8, 10) //8 neurons (spike-train length = 10)
                                                                                            ),
                                                               true,                                                                 //Route the input pattern as the predictors to a readout layer
                                                               new ExternalFieldSettings("coord_abcissa", new RealFeatureFilterSettings(), true),
                                                               new ExternalFieldSettings("coord_ordinate", new RealFeatureFilterSettings(), true)
                                                               );
                homogenousExcitability = new HomogenousExcitabilitySettings(1d, 0.7d, 0.2d);
                break;

            /*
             * Forbidden - no spikes coding.
             */
            default:
                //1 analog input neuron per input field
                inputCfg = StateMachineDesigner.CreateInputCfg(new FeedingPatternedSettings(1, NeuralPreprocessor.BidirProcessing.Continuous, RCNet.Neural.Data.InputPattern.VariablesSchema.Groupped, new UnificationSettings(false, false)),
                                                               new InputSpikesCoderSettings(InputEncoder.InputSpikesCoding.Forbidden),
                                                               true,     //Route the input pattern as the predictors to a readout layer
                                                               new ExternalFieldSettings("coord_abcissa", new RealFeatureFilterSettings(), true),
                                                               new ExternalFieldSettings("coord_ordinate", new RealFeatureFilterSettings(), true)
                                                               );
                homogenousExcitability = new HomogenousExcitabilitySettings(0.25, 0.7, 0.2d);
                break;
            }

            //Simplified readout layer configuration
            ReadoutLayerSettings readoutCfg = StateMachineDesigner.CreateClassificationReadoutCfg(new CrossvalidationSettings(0.0825d, 0, 1),
                                                                                                  StateMachineDesigner.CreateMultiLayerFFNetCfg(10, new AFAnalogLeakyReLUSettings(), 2, 5, 400),
                                                                                                  1,
                                                                                                  "Hand movement",
                                                                                                  "curved swing",
                                                                                                  "horizontal swing",
                                                                                                  "vertical swing",
                                                                                                  "anti-clockwise arc",
                                                                                                  "clockwise arc",
                                                                                                  "circle",
                                                                                                  "horizontal straight-line",
                                                                                                  "vertical straight-line",
                                                                                                  "horizontal zigzag",
                                                                                                  "vertical zigzag",
                                                                                                  "horizontal wavy",
                                                                                                  "vertical wavy",
                                                                                                  "face-up curve",
                                                                                                  "face-down curve",
                                                                                                  "tremble"
                                                                                                  );
            //Create designer instance
            StateMachineDesigner smd = new StateMachineDesigner(inputCfg, readoutCfg);
            //Create pure LSM fashioned StateMachine configuration
            StateMachineSettings stateMachineCfg = smd.CreatePureLSMCfg(272,                            //Total size of the reservoir
                                                                        new AFSpikingAdExpIFSettings(), //Activation
                                                                        homogenousExcitability,         //Homogenous excitability
                                                                        1,                              //Input connection density
                                                                        0,                              //Input max delay
                                                                        0.1d,                           //Interconnection density
                                                                        0,                              //Internal synapses max delay
                                                                        0,                              //Steady bias
                                                                        new PredictorsProviderSettings(new PredictorFiringTraceSettings(0.0005, 0))
                                                                        );

            //Display StateMachine xml configuration
            string xmlConfig = stateMachineCfg.GetXml(true).ToString();

            _log.Write("StateMachine configuration xml:");
            _log.Write("-------------------------------");
            _log.Write(xmlConfig);
            _log.Write(string.Empty);
            _log.Write("Press Enter to continue (StateMachine training and verification)...");
            _log.Write(string.Empty);
            Console.ReadLine();

            //Instantiation and training
            _log.Write("StateMachine training:");
            _log.Write("----------------------");
            _log.Write(string.Empty);
            //StateMachine instance
            StateMachine stateMachine = new StateMachine(stateMachineCfg);

            //StateMachine training
            TrainStateMachine(stateMachine, "./Data/LibrasMovement_train.csv", out _);
            _log.Write(string.Empty);
            //StateMachine verification
            _log.Write("StateMachine verification:");
            _log.Write("--------------------------");
            _log.Write(string.Empty);
            VerifyStateMachine(stateMachine, "./Data/LibrasMovement_verify.csv", null, out _);
            _log.Write(string.Empty);

            return;
        }