/// <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; }
//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; }
//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; }