//Constructor /// <summary> /// Instantiates an uninitialized instance /// </summary> public StateMachineDesigner(InputEncoderSettings inputCfg, ReadoutLayerSettings readoutCfg) { InputCfg = inputCfg ?? throw new ArgumentNullException("inputCfg"); ReadoutCfg = readoutCfg ?? throw new ArgumentNullException("readoutCfg"); _rand = new Random(0); return; }
/// <summary> /// Checks consistency of this reservoir instance configuration and given /// preprocessor's input and reservoir structure configuration /// </summary> /// <param name="inputCfg">Preprocessor's input configuration</param> /// <param name="reservoirStructureCfg">Reservoir structure configuration</param> public void CheckConsistency(InputEncoderSettings inputCfg, ReservoirStructureSettings reservoirStructureCfg) { if (StructureCfgName != reservoirStructureCfg.Name) { throw new InvalidOperationException($"Name of the reservoir structure configuration {StructureCfgName} is not equal to name of given reservoir structure configuration name {reservoirStructureCfg.Name}."); } foreach (InputConnSettings inputConnCfg in InputConnsCfg.ConnCfgCollection) { inputCfg.VaryingFieldsCfg.GetFieldID(inputConnCfg.InputFieldName, true); reservoirStructureCfg.PoolsCfg.GetPoolID(inputConnCfg.PoolName); } return; }
/// <summary> /// Performs an additional consistency check. /// </summary> /// <param name="inputCfg">The configuration of the input encoder.</param> /// <param name="reservoirStructureCfg">The configuration of the reservoir structure.</param> public void CheckConsistency(InputEncoderSettings inputCfg, ReservoirStructureSettings reservoirStructureCfg) { if (StructureCfgName != reservoirStructureCfg.Name) { throw new ArgumentException($"The specified name of the reservoir structure configuration {StructureCfgName} does not correspond.", "StructureCfgName"); } foreach (InputConnSettings inputConnCfg in InputConnsCfg.ConnCfgCollection) { inputCfg.VaryingFieldsCfg.GetFieldID(inputConnCfg.InputFieldName, true); reservoirStructureCfg.PoolsCfg.GetPoolID(inputConnCfg.PoolName); } return; }
/// <summary> /// Creates an initialized instance. /// </summary> /// <param name="elem">A xml element containing the configuration data.</param> public NeuralPreprocessorSettings(XElement elem) { //Validation XElement settingsElem = Validate(elem, XsdTypeName); //Parsing InputEncoderCfg = new InputEncoderSettings(settingsElem.Elements("inputEncoder").First()); ReservoirStructuresCfg = new ReservoirStructuresSettings(settingsElem.Elements("reservoirStructures").First()); ReservoirInstancesCfg = new ReservoirInstancesSettings(settingsElem.Elements("reservoirInstances").First()); PredictorsReductionRatio = double.Parse(settingsElem.Attribute("predictorsReductionRatio").Value, CultureInfo.InvariantCulture); PredictorValueMinSpan = double.Parse(settingsElem.Attribute("predictorValueMinSpan").Value, CultureInfo.InvariantCulture); Check(); return; }
/// <summary> /// Runs the example code. /// </summary> public void Run() { //Create StateMachine configuration //Simplified input configuration InputEncoderSettings inputCfg = StateMachineDesigner.CreateInputCfg(new FeedingContinuousSettings(FeedingContinuousSettings.AutoBootCyclesNum), true, new ExternalFieldSettings("High", new RealFeatureFilterSettings()), new ExternalFieldSettings("Low", new RealFeatureFilterSettings()), new ExternalFieldSettings("Adj Close", new RealFeatureFilterSettings()) ); //Simplified readout layer configuration ReadoutLayerSettings readoutCfg = StateMachineDesigner.CreateForecastReadoutCfg(StateMachineDesigner.CreateSingleLayerRegrNet(new IdentitySettings(), 2, 1000), 0.1d, 1, "High", "Low" ); //Create designer instance StateMachineDesigner smd = new StateMachineDesigner(inputCfg, readoutCfg); //Create pure ESN fashioned StateMachine configuration StateMachineSettings stateMachineCfg = smd.CreatePureESNCfg(250, 1, 0, 0.2d, 0, 0.1d, 0.75d, null, PredictorsProvider.PredictorID.Activation, PredictorsProvider.PredictorID.ActivationSquare); //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("Pres Enter to continue (StateMachine training)..."); _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\\TTOO.csv", out double[] predictionInputVector); //Forecast ReadoutLayer.ReadoutData readoutData = stateMachine.ComputeReadoutData(predictionInputVector); _log.Write(" Forecast next High and Low (real values are High=6.58$ and Low=5.99$):", false); _log.Write(stateMachine.RL.GetForecastReport(readoutData.DataVector, 6)); _log.Write(string.Empty); return; }
//Constructors /// <summary> /// Creates an initialized instance. /// </summary> /// <param name="inputEncoderCfg">The configuration of the input encoder.</param> /// <param name="reservoirStructuresCfg">The configuration of the reservoir structures.</param> /// <param name="reservoirInstancesCfg">The configuration of the reservoir instances.</param> /// <param name="predictorsReductionRatio">Determines how many predictors having smallest value-span to be disabled.</param> /// <param name="predictorValueMinSpan">Specifies the minimum acceptable predictor's value-span.</param> public NeuralPreprocessorSettings(InputEncoderSettings inputEncoderCfg, ReservoirStructuresSettings reservoirStructuresCfg, ReservoirInstancesSettings reservoirInstancesCfg, double predictorsReductionRatio = DefaultPredictorsReductionRatio, double predictorValueMinSpan = DefaultPredictorValueMinSpan ) { InputEncoderCfg = (InputEncoderSettings)inputEncoderCfg.DeepClone(); ReservoirStructuresCfg = (ReservoirStructuresSettings)reservoirStructuresCfg.DeepClone(); ReservoirInstancesCfg = (ReservoirInstancesSettings)reservoirInstancesCfg.DeepClone(); PredictorsReductionRatio = predictorsReductionRatio; PredictorValueMinSpan = predictorValueMinSpan; Check(); return; }
/// <summary> /// Creates the neural preprocessor configuration. /// </summary> /// <param name="resInstName">The reservoir instance name.</param> /// <param name="resStructName">The reservoir structure configuration name.</param> /// <param name="pool1Name">The name of the pool1.</param> /// <param name="pool2Name">The name of the pool2.</param> NeuralPreprocessorSettings CreatePreprocessorCfg(string resInstName, string resStructName, string pool1Name, string pool2Name) { //Create input configuration InputEncoderSettings inputCfg = CreateInputCfg(); //Create reservoir structure configuration ReservoirStructureSettings resStructCfg = CreateResStructCfg(resStructName, pool1Name, pool2Name); //Create reservoir instance configuration ReservoirInstanceSettings resInstCfg = CreateResInstCfg(resInstName, resStructName, pool1Name, pool2Name, 0, 1); //Create reservoir preprocessor configuration NeuralPreprocessorSettings preprocessorCfg = new NeuralPreprocessorSettings(inputCfg, new ReservoirStructuresSettings(resStructCfg), new ReservoirInstancesSettings(resInstCfg), NeuralPreprocessorSettings.DefaultPredictorsReductionRatio ); return(preprocessorCfg); }
/// <summary> /// Runs the example code. /// </summary> public void Run() { //Create StateMachine configuration //Simplified input configuration InputEncoderSettings inputCfg = StateMachineDesigner.CreateInputCfg(new FeedingPatternedSettings(1, true, RCNet.Neural.Data.InputPattern.VariablesSchema.Groupped), false, new ExternalFieldSettings("coord_abcissa", new RealFeatureFilterSettings()), new ExternalFieldSettings("coord_ordinate", new RealFeatureFilterSettings()) ); //Simplified readout layer configuration ReadoutLayerSettings readoutCfg = StateMachineDesigner.CreateClassificationReadoutCfg(StateMachineDesigner.CreateSingleLayerRegrNet(new IdentitySettings(), 5, 400), 0.0825d, 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 ESN fashioned StateMachine configuration StateMachineSettings stateMachineCfg = smd.CreatePureESNCfg(150, 0.25d, 5, 0.1d, 0, 0, 0, null, PredictorsProvider.PredictorID.FiringCount ); //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("Pres 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; }
//Methods /// <summary> /// Runs the example code. /// </summary> public void Run() { //Create StateMachine configuration //Simplified input configuration InputEncoderSettings inputCfg = StateMachineDesigner.CreateInputCfg(new FeedingContinuousSettings(FeedingContinuousSettings.AutoBootCyclesNum), new InputSpikesCoderSettings(), true, new ExternalFieldSettings("High", new RealFeatureFilterSettings()), new ExternalFieldSettings("Low", new RealFeatureFilterSettings()), new ExternalFieldSettings("Adj Close", new RealFeatureFilterSettings()) ); //Simplified readout layer configuration ReadoutLayerSettings readoutCfg = StateMachineDesigner.CreateForecastReadoutCfg(new CrossvalidationSettings(0.1d, 0, 1), StateMachineDesigner.CreateSingleLayerFFNetCfg(new AFAnalogIdentitySettings(), 2, 1000), 1, "High", "Low" ); //Create designer instance StateMachineDesigner smd = new StateMachineDesigner(inputCfg, readoutCfg); //Create pure ESN fashioned StateMachine configuration StateMachineSettings stateMachineCfg = smd.CreatePureESNCfg(250, //Total size of the reservoir (number of hidden neurons within the reservoir). 2.5, //Maximum stimulation strength through hidden neuron's input synapses. 1d, //Connection density of an input field. 1 means that each input field will be synaptically connected to all neurons. 0, //Maximum delay on an input synapse. 0 means no delay. 0.1d, //Interconnection density. 0.1 means that each hidden neuron will be synaptically internally connected to 10% of other hidden neurons. 0, //Maximum delay on an internal synapse. 0 means no delay. 0d, //Maximum absolute value of the hidden neuron bias. 0 means no bias. 0d, //Maximum retainment on an hidden neuron. 0 means no retainment. new PredictorsProviderSettings(new PredictorActivationSettings(), new PredictorActivationPowerSettings(2d, true), new PredictorFiringTraceSettings(0.05, 30) ) ); //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)..."); _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/TTOO.csv", out double[] predictionInputVector); //Forecasting double[] outputVector = stateMachine.Compute(predictionInputVector, out ReadoutLayer.ReadoutData readoutData); _log.Write(" Forecasted next High and Low TTOO prices (real prices were High = 3.61$ and Low=3.10$):", false); _log.Write(stateMachine.RL.GetForecastReport(readoutData.NatDataVector, 6)); _log.Write(string.Empty); return; }
//Methods /// <summary> /// Runs the example code. /// </summary> public void Run() { //Create StateMachine configuration //Simplified input configuration InputEncoderSettings inputCfg = StateMachineDesigner.CreateInputCfg(new FeedingPatternedSettings(1, NeuralPreprocessor.BidirProcessing.WithReset, RCNet.Neural.Data.InputPattern.VariablesSchema.Groupped), new InputSpikesCoderSettings(), false, new ExternalFieldSettings("coord_abcissa", new RealFeatureFilterSettings()), new ExternalFieldSettings("coord_ordinate", new RealFeatureFilterSettings()) ); //Simplified readout layer configuration ReadoutLayerSettings readoutCfg = StateMachineDesigner.CreateClassificationReadoutCfg(new CrossvalidationSettings(0.0825d, CrossvalidationSettings.AutoFolds, 1), StateMachineDesigner.CreateSingleLayerFFNetCfg(new AFAnalogIdentitySettings(), 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 ESN fashioned StateMachine configuration StateMachineSettings stateMachineCfg = smd.CreatePureESNCfg(150, //Size StateMachineDesigner.DefaultAnalogMaxInputStrength, //Max input strength 0.25d, //Input connection density 5, //Max input delay 0.1d, //Interconnection density 0, //Max internal delay 0, //Max absolute value of bias 0, //Max retainment strength new PredictorsProviderSettings(new PredictorFiringTraceSettings(0.05, 45)) ); //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; }
/// <summary> /// Runs the example code. /// </summary> public void Run() { //Create StateMachine configuration //Simplified input configuration InputEncoderSettings inputCfg = StateMachineDesigner.CreateInputCfg(new FeedingPatternedSettings(1, true, RCNet.Neural.Data.InputPattern.VariablesSchema.Groupped), false, new ExternalFieldSettings("coord_abcissa", new RealFeatureFilterSettings(), true, new SpikeCodeSettings(15, 1e-3, true, true, true, false)), new ExternalFieldSettings("coord_ordinate", new RealFeatureFilterSettings(), true, new SpikeCodeSettings(15, 1e-3, true, true, true, false)) ); //Simplified readout layer configuration ReadoutLayerSettings readoutCfg = StateMachineDesigner.CreateClassificationReadoutCfg(StateMachineDesigner.CreateSingleLayerRegrNet(new ElliotSettings(), 5, 400), 0.0825d, 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(new ProportionsSettings(60, 1, 1), //Proportions (it also determines total size) new AdExpIFSettings(), //Activation //new ExpIFSettings(null, null, null, null, null, null, null, 0), //Activation new HomogenousExcitabilitySettings(0.75, 0.75, 0.25), 1d, //Input connection density 0, //Input max delay 0.1d, //Interconnection density 0, //Internal synapses max delay 0, //Steady bias null, PredictorsProvider.PredictorID.FiringFadingSum ); //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("Pres 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; }