//Constructor /// <summary> /// Creates an initialized instance of hidden neuron having analog activation /// </summary> /// <param name="location">Information about a neuron location within the neural preprocessor</param> /// <param name="analogActivation">Instantiated activation function.</param> /// <param name="bias">Constant bias to be applied.</param> /// <param name="firingThreshold">A number between 0 and 1 (LT1). Every time the new activation value is higher than the previous activation value by at least the threshold, it is evaluated as a firing event.</param> /// <param name="thresholdMaxRefDeepness">Maximum deepness of historical normalized activation value to be compared with current normalized activation value when evaluating firing event.</param> /// <param name="retainmentStrength">Strength of the analog neuron's retainment property.</param> /// <param name="predictorsCfg">Configuration of neuron's predictors</param> public HiddenNeuron(NeuronLocation location, IActivationFunction analogActivation, double bias, double firingThreshold, int thresholdMaxRefDeepness, double retainmentStrength, PredictorsSettings predictorsCfg ) { Location = location; Statistics = new NeuronStatistics(); Bias = bias; //Activation check if (analogActivation.TypeOfActivation == ActivationType.Spiking) { throw new InvalidOperationException($"Called wrong type of hidden neuron constructor for analog activation."); } _activation = analogActivation; _analogFiringThreshold = firingThreshold; _histActivationsQueue = thresholdMaxRefDeepness < 2 ? null : new SimpleQueue <double>(thresholdMaxRefDeepness); _analogRetainmentStrength = retainmentStrength; _predictors = predictorsCfg != null ? new PredictorsProvider(predictorsCfg) : null; OutputData = new NeuronOutputData(); Reset(false); return; }
/// <summary> /// Creates an initialized instance. /// </summary> /// <param name="elem">Xml element containing the initialization settings.</param> public SpikingNeuronGroupSettings(XElement elem) { //Validation XElement settingsElem = Validate(elem, XsdTypeName); //Parsing //Name Name = settingsElem.Attribute("name").Value; //Relative share RelShare = double.Parse(settingsElem.Attribute("relShare").Value, CultureInfo.InvariantCulture); //Activation settings ActivationCfg = ActivationFactory.LoadSettings(settingsElem.Elements().First()); //Homogenous excitability XElement homogenousExcitabilityElem = settingsElem.Elements("homogenousExcitability").FirstOrDefault(); HomogenousExcitabilityCfg = homogenousExcitabilityElem == null ? new HomogenousExcitabilitySettings() : new HomogenousExcitabilitySettings(homogenousExcitabilityElem); //Bias XElement biasSettingsElem = settingsElem.Elements("bias").FirstOrDefault(); BiasCfg = biasSettingsElem == null ? null : new RandomValueSettings(biasSettingsElem); //Predictors XElement predictorsSettingsElem = settingsElem.Elements("predictors").FirstOrDefault(); if (predictorsSettingsElem != null) { PredictorsCfg = new PredictorsSettings(predictorsSettingsElem); } Check(); return; }
/// <summary> /// Creates an initialized instance. /// </summary> /// <param name="elem">Xml element containing the initialization settings.</param> public AnalogNeuronGroupSettings(XElement elem) { //Validation XElement settingsElem = Validate(elem, XsdTypeName); //Parsing //Name Name = settingsElem.Attribute("name").Value; //Relative share RelShare = double.Parse(settingsElem.Attribute("relShare").Value, CultureInfo.InvariantCulture); //Activation settings ActivationCfg = ActivationFactory.LoadSettings(settingsElem.Elements().First()); //Firing threshold FiringThreshold = double.Parse(settingsElem.Attribute("firingThreshold").Value, CultureInfo.InvariantCulture); ThresholdMaxRefDeepness = int.Parse(settingsElem.Attribute("thresholdMaxRefDeepness").Value, CultureInfo.InvariantCulture); //Bias XElement biasSettingsElem = settingsElem.Elements("bias").FirstOrDefault(); BiasCfg = biasSettingsElem == null ? null : new RandomValueSettings(biasSettingsElem); //Retainment XElement retainmentSettingsElem = settingsElem.Elements("retainment").FirstOrDefault(); RetainmentCfg = retainmentSettingsElem == null ? null : new RetainmentSettings(retainmentSettingsElem); //Predictors XElement predictorsSettingsElem = settingsElem.Elements("predictors").FirstOrDefault(); if (predictorsSettingsElem != null) { PredictorsCfg = new PredictorsSettings(predictorsSettingsElem); } Check(); return; }
/// <summary> /// Creates reservoir instance configuration /// </summary> /// <param name="instName">Name of the reservoir instance</param> /// <param name="structName">Name of the associated reservoir structure configuration</param> /// <param name="pool1Name">Name of the first pool</param> /// <param name="pool2Name">Name of the second pool</param> /// <param name="inputMaxDelay">Maximum delay of input synapses</param> /// <param name="internalMaxDelay">Maximum delay of internal synapses</param> private ReservoirInstanceSettings CreateResInstCfg(string instName, string structName, string pool1Name, string pool2Name, int inputMaxDelay, int internalMaxDelay ) { //Maximum weight of input connection const double ConnMaxWeight = 0.6d; //Create input connections configurations for each input field //We connect High input field to Pool1 InputConnSettings inpConnHighCfg = CreateInputConnCfg("High", pool1Name); //We connect Low input field to Pool2 InputConnSettings inpConnLowCfg = CreateInputConnCfg("Low", pool2Name); //We connect Adj Close input field to both pools InputConnSettings inpConnAdjCloseP1Cfg = CreateInputConnCfg("Adj Close", pool1Name); InputConnSettings inpConnAdjCloseP2Cfg = CreateInputConnCfg("Adj Close", pool2Name); //Synapse general configuration AnalogSourceSettings asc = new AnalogSourceSettings(new URandomValueSettings(0, ConnMaxWeight)); SynapseATInputSettings synapseATInputSettings = new SynapseATInputSettings(Synapse.SynapticDelayMethod.Random, inputMaxDelay, asc, null); SynapseATIndifferentSettings synapseATIndifferentSettings = new SynapseATIndifferentSettings(Synapse.SynapticDelayMethod.Random, internalMaxDelay); SynapseATSettings synapseATCfg = new SynapseATSettings(SynapseATSettings.DefaultSpectralRadiusNum, synapseATInputSettings, synapseATIndifferentSettings); SynapseSettings synapseCfg = new SynapseSettings(null, synapseATCfg); //Predictors configuration //We use constructor accepting array of boolean switches //Initially we set all switches to false - all available predictors are forbidden bool[] predictorSwitches = new bool[PredictorsProvider.NumOfSupportedPredictors]; predictorSwitches.Populate(false); //Now we enable Activation and ActivationMWAvg predictors predictorSwitches[(int)PredictorsProvider.PredictorID.Activation] = true; predictorSwitches[(int)PredictorsProvider.PredictorID.ActivationMWAvg] = true; //We configure activation moving average predictor to use constant weights and last 7 values without the leaks ActivationMWAvgSettings activationMWAvgCfg = new ActivationMWAvgSettings(7, PredictorsProvider.PredictorMWAvgWeightsType.Constant); //We create predictors parameters configuration including custom configuration of activation moving average predictor PredictorsParamsSettings predictorsParamsCfg = new PredictorsParamsSettings(activationMWAvgCfg); //Create predictors configuration using prepared boolean switches and predictors parameters PredictorsSettings predictorsCfg = new PredictorsSettings(predictorSwitches, predictorsParamsCfg); //Create reservoir instance configuration ReservoirInstanceSettings resInstCfg = new ReservoirInstanceSettings(instName, structName, new InputConnsSettings(inpConnHighCfg, inpConnLowCfg, inpConnAdjCloseP1Cfg, inpConnAdjCloseP2Cfg), synapseCfg, predictorsCfg ); return(resInstCfg); }
//Constructors /// <summary> /// Creates an initialized instance /// </summary> /// <param name="name">Name of the reservoir structure settings</param> /// <param name="structureCfgName">Name of the reservoir structure settings</param> /// <param name="inputConnsCfg">Collection of input connections settings</param> /// <param name="synapseCfg">Synapse configuration</param> /// <param name="predictorsCfg">Configuration of the predictors</param> public ReservoirInstanceSettings(string name, string structureCfgName, InputConnsSettings inputConnsCfg, SynapseSettings synapseCfg = null, PredictorsSettings predictorsCfg = null ) { Name = name; StructureCfgName = structureCfgName; InputConnsCfg = (InputConnsSettings)inputConnsCfg.DeepClone(); SynapseCfg = synapseCfg == null ? null : (SynapseSettings)synapseCfg.DeepClone(); PredictorsCfg = predictorsCfg == null ? null : (PredictorsSettings)predictorsCfg.DeepClone(); Check(); return; }
//Constructors /// <summary> /// Creates an initialized instance /// </summary> /// <param name="name">Name of the neuron group</param> /// <param name="relShare">Specifies how big relative portion of pool's neurons is formed by this group of the neurons</param> /// <param name="activationCfg">Common activation function settings of the groupped neurons</param> /// <param name="homogenousExcitabilityCfg">Configuration of the neuron's homogenous excitability</param> /// <param name="biasCfg">Each neuron within the group receives constant input bias. Value of the neuron's bias is driven by this random settings</param> /// <param name="predictorsCfg">Configuration of the predictors</param> public SpikingNeuronGroupSettings(string name, double relShare, RCNetBaseSettings activationCfg, HomogenousExcitabilitySettings homogenousExcitabilityCfg = null, RandomValueSettings biasCfg = null, PredictorsSettings predictorsCfg = null ) { Name = name; RelShare = relShare; ActivationCfg = activationCfg.DeepClone(); HomogenousExcitabilityCfg = homogenousExcitabilityCfg == null ? new HomogenousExcitabilitySettings() : (HomogenousExcitabilitySettings)homogenousExcitabilityCfg.DeepClone(); BiasCfg = biasCfg == null ? null : (RandomValueSettings)biasCfg.DeepClone(); PredictorsCfg = predictorsCfg == null ? null : (PredictorsSettings)predictorsCfg.DeepClone(); Check(); return; }
//Constructors /// <summary> /// Creates an initialized instance /// </summary> /// <param name="name">Pool name</param> /// <param name="proportionsCfg">Pool dimensions</param> /// <param name="neuronGroupsCfg">Settings of the neuron groups in the pool</param> /// <param name="interconnectionCfg">Configuration of the pool's neurons interconnection</param> /// <param name="predictorsCfg">Configuration of the predictors</param> /// <param name="coordinatesCfg">Pool coordinates within the 3D space</param> public PoolSettings(string name, ProportionsSettings proportionsCfg, NeuronGroupsSettings neuronGroupsCfg, InterconnSettings interconnectionCfg, PredictorsSettings predictorsCfg = null, CoordinatesSettings coordinatesCfg = null ) { Name = name; ProportionsCfg = (ProportionsSettings)proportionsCfg.DeepClone(); NeuronGroupsCfg = (NeuronGroupsSettings)neuronGroupsCfg.DeepClone(); InterconnectionCfg = (InterconnSettings)interconnectionCfg.DeepClone(); PredictorsCfg = predictorsCfg == null ? null : (PredictorsSettings)predictorsCfg.DeepClone(); CoordinatesCfg = coordinatesCfg == null ? new CoordinatesSettings() : (CoordinatesSettings)coordinatesCfg.DeepClone(); Check(); return; }
//Constructors /// <summary> /// Creates an initialized instance /// </summary> /// <param name="name">Name of the neuron group</param> /// <param name="relShare">Specifies how big relative portion of pool's neurons is formed by this group of the neurons</param> /// <param name="activationCfg">Common activation function settings of the groupped neurons</param> /// <param name="firingThreshold"> /// A number between 0 and 1 (LT1). Every time the new normalized activation value is higher than the previous /// normalized activation value by at least the threshold, it is evaluated as a firing event. /// </param> /// <param name="thresholdMaxRefDeepness">Maximum deepness of historical normalized activation value to be compared with current normalized activation value when evaluating firing event.</param> /// <param name="biasCfg">Each neuron within the group receives constant input bias. Value of the neuron's bias is driven by this random settings</param> /// <param name="retainmentCfg">Neurons' retainment property configuration</param> /// <param name="predictorsCfg">Configuration of the predictors</param> public AnalogNeuronGroupSettings(string name, double relShare, RCNetBaseSettings activationCfg, double firingThreshold = DefaultFiringThreshold, int thresholdMaxRefDeepness = DefaultThresholdMaxRefDeepness, RandomValueSettings biasCfg = null, RetainmentSettings retainmentCfg = null, PredictorsSettings predictorsCfg = null ) { Name = name; RelShare = relShare; ActivationCfg = activationCfg.DeepClone(); FiringThreshold = firingThreshold; ThresholdMaxRefDeepness = thresholdMaxRefDeepness; BiasCfg = biasCfg == null ? null : (RandomValueSettings)biasCfg.DeepClone(); RetainmentCfg = retainmentCfg == null ? null : (RetainmentSettings)retainmentCfg.DeepClone(); PredictorsCfg = predictorsCfg == null ? null : (PredictorsSettings)predictorsCfg.DeepClone(); Check(); return; }
/// <summary> /// Creates an initialized instance. /// </summary> /// <param name="elem">Xml element containing the initialization settings</param> public ReservoirInstanceSettings(XElement elem) { //Validation XElement settingsElem = Validate(elem, XsdTypeName); //Parsing Name = settingsElem.Attribute("name").Value; StructureCfgName = settingsElem.Attribute("reservoirStructure").Value; //Input connections InputConnsCfg = new InputConnsSettings(settingsElem.Elements("inputConnections").First()); //Synapse XElement synapseElem = settingsElem.Elements("synapse").FirstOrDefault(); SynapseCfg = synapseElem == null ? new SynapseSettings() : new SynapseSettings(synapseElem); //Predictors XElement predictorsElem = settingsElem.Elements("predictors").FirstOrDefault(); if (predictorsElem != null) { PredictorsCfg = new PredictorsSettings(predictorsElem); } Check(); return; }
//Constructor /// <summary> /// Creates an initialized instance of hidden neuron having spiking activation /// </summary> /// <param name="location">Information about a neuron location within the neural preprocessor</param> /// <param name="spikingActivation">Instantiated activation function.</param> /// <param name="bias">Constant bias to be applied.</param> /// <param name="predictorsCfg">Configuration of neuron's predictors</param> public HiddenNeuron(NeuronLocation location, IActivationFunction spikingActivation, double bias, PredictorsSettings predictorsCfg ) { Location = location; Statistics = new NeuronStatistics(); Bias = bias; //Activation check if (spikingActivation.TypeOfActivation == ActivationType.Analog) { //Spiking throw new InvalidOperationException($"Called wrong type of hidden neuron constructor for spiking activation."); } _activation = spikingActivation; _analogFiringThreshold = 0; _histActivationsQueue = null; _analogRetainmentStrength = 0; _predictors = predictorsCfg != null ? new PredictorsProvider(predictorsCfg) : null; OutputData = new NeuronOutputData(); Reset(false); return; }
/// <summary> /// Creates an initialized instance from the given xml element. /// </summary> /// <param name="elem">Xml element containing the initialization settings</param> public PoolSettings(XElement elem) { //Validation XElement poolSettingsElem = Validate(elem, XsdTypeName); //Parsing Name = poolSettingsElem.Attribute("name").Value; ProportionsCfg = new ProportionsSettings(poolSettingsElem.Elements("proportions").First()); NeuronGroupsCfg = new NeuronGroupsSettings(poolSettingsElem.Elements("neuronGroups").First()); InterconnectionCfg = new InterconnSettings(poolSettingsElem.Elements("interconnection").First()); //Predictors XElement predictorsElem = poolSettingsElem.Elements("predictors").FirstOrDefault(); if (predictorsElem != null) { PredictorsCfg = new PredictorsSettings(predictorsElem); } //Coordinates XElement coordinatesElem = poolSettingsElem.Elements("coordinates").FirstOrDefault(); CoordinatesCfg = coordinatesElem == null ? new CoordinatesSettings() : new CoordinatesSettings(coordinatesElem); Check(); return; }
/// <summary> /// Creates StateMachine configuration following pure LSM design /// </summary> /// <param name="proportionsCfg">LSM pool proportions</param> /// <param name="aFnCfg">Spiking activation function configuration</param> /// <param name="hes">Homogenous excitability configuration</param> /// <param name="inputConnectionDensity">Density of the input field connections to hidden neurons</param> /// <param name="maxInputDelay">Maximum delay of input synapse</param> /// <param name="interconnectionDensity">Density of the hidden neurons interconnection</param> /// <param name="maxInternalDelay">Maximum delay of internal synapse</param> /// <param name="steadyBias">Constant bias (0 means bias is not required)</param> /// <param name="predictorsParamsCfg">Predictors parameters (use null for defaults)</param> /// <param name="allowedPredictor">Allowed predictor(s)</param> public StateMachineSettings CreatePureLSMCfg(ProportionsSettings proportionsCfg, RCNetBaseSettings aFnCfg, HomogenousExcitabilitySettings hes, double inputConnectionDensity, int maxInputDelay, double interconnectionDensity, int maxInternalDelay, double steadyBias, PredictorsParamsSettings predictorsParamsCfg, params PredictorsProvider.PredictorID[] allowedPredictor ) { //Activation check if (ActivationFactory.Create(aFnCfg, new Random()).TypeOfActivation != ActivationType.Spiking) { throw new ArgumentException("Specified activation must be spiking.", "aFnCfg"); } //One neuron group SpikingNeuronGroupSettings grp = CreateSpikingGroup(aFnCfg, hes, steadyBias); //Simple spiking pool PoolSettings poolCfg = new PoolSettings(GetPoolName(ActivationContent.Spiking, 0), proportionsCfg, new NeuronGroupsSettings(grp), new InterconnSettings(new RandomSchemaSettings(interconnectionDensity, 0d, false, false)) ); //Simple reservoir structure ReservoirStructureSettings resStructCfg = new ReservoirStructureSettings(GetResStructName(ActivationContent.Spiking, 0), new PoolsSettings(poolCfg) ); //Input connections configuration List <InputConnSettings> inputConns = new List <InputConnSettings>(InputCfg.VaryingFieldsCfg.ExternalFieldsCfg.FieldCfgCollection.Count); foreach (ExternalFieldSettings fieldCfg in InputCfg.VaryingFieldsCfg.ExternalFieldsCfg.FieldCfgCollection) { InputConnSettings inputConnCfg = new InputConnSettings(fieldCfg.Name, poolCfg.Name, inputConnectionDensity, 0 ); inputConns.Add(inputConnCfg); } //Synapse general configuration SynapseSTInputSettings synapseSTInputSettings = new SynapseSTInputSettings(Synapse.SynapticDelayMethod.Random, maxInputDelay); SynapseSTExcitatorySettings synapseSTExcitatorySettings = new SynapseSTExcitatorySettings(Synapse.SynapticDelayMethod.Random, maxInternalDelay); SynapseSTInhibitorySettings synapseSTInhibitorySettings = new SynapseSTInhibitorySettings(Synapse.SynapticDelayMethod.Random, maxInternalDelay); SynapseSTSettings synapseSTCfg = new SynapseSTSettings(synapseSTInputSettings, synapseSTExcitatorySettings, synapseSTInhibitorySettings); SynapseSettings synapseCfg = new SynapseSettings(synapseSTCfg, null); //Initially set all switches to false - all available predictors are forbidden bool[] predictorSwitches = new bool[PredictorsProvider.NumOfSupportedPredictors]; predictorSwitches.Populate(false); //Enable specified predictors foreach (PredictorsProvider.PredictorID predictorID in allowedPredictor) { predictorSwitches[(int)predictorID] = true; } //Create predictors configuration using default params PredictorsSettings predictorsCfg = new PredictorsSettings(predictorSwitches, predictorsParamsCfg); //Create reservoir instance ReservoirInstanceSettings resInstCfg = new ReservoirInstanceSettings(GetResInstName(ResDesign.PureLSM, 0), resStructCfg.Name, new InputConnsSettings(inputConns), synapseCfg, predictorsCfg ); //Build and return SM configuration return(new StateMachineSettings(new NeuralPreprocessorSettings(InputCfg, new ReservoirStructuresSettings(resStructCfg), new ReservoirInstancesSettings(resInstCfg) ), ReadoutCfg )); }
/// <summary> /// Creates StateMachine configuration following pure ESN design /// </summary> /// <param name="totalSize">Total number of hidden neurons</param> /// <param name="inputConnectionDensity">Density of the input field connections to hidden neurons</param> /// <param name="maxInputDelay">Maximum delay of input synapse</param> /// <param name="interconnectionDensity">Density of the hidden neurons interconnection</param> /// <param name="maxInternalDelay">Maximum delay of internal synapse</param> /// <param name="maxAbsBias">Maximum absolute value of the bias (0 means bias is not required)</param> /// <param name="maxRetainmentStrength">Maximum retainment strength (0 means retainment property is not required)</param> /// <param name="predictorsParamsCfg">Predictors parameters (use null for defaults)</param> /// <param name="allowedPredictor">Allowed predictor(s)</param> public StateMachineSettings CreatePureESNCfg(int totalSize, double inputConnectionDensity, int maxInputDelay, double interconnectionDensity, int maxInternalDelay, double maxAbsBias, double maxRetainmentStrength, PredictorsParamsSettings predictorsParamsCfg, params PredictorsProvider.PredictorID[] allowedPredictor ) { const double MaxInputWeightSum = 2.75d; //Default ESN activation RCNetBaseSettings aFnCfg = new TanHSettings(); //One neuron group AnalogNeuronGroupSettings grp = CreateAnalogGroup(aFnCfg, maxAbsBias, maxRetainmentStrength); //Simple analog pool PoolSettings poolCfg = new PoolSettings(GetPoolName(ActivationContent.Analog, 0), new ProportionsSettings(totalSize, 1, 1), new NeuronGroupsSettings(grp), new InterconnSettings(new RandomSchemaSettings(interconnectionDensity)) ); //Simple reservoir structure ReservoirStructureSettings resStructCfg = new ReservoirStructureSettings(GetResStructName(ActivationContent.Analog, 0), new PoolsSettings(poolCfg) ); //Input connections configuration List <InputConnSettings> inputConns = new List <InputConnSettings>(InputCfg.VaryingFieldsCfg.ExternalFieldsCfg.FieldCfgCollection.Count); double maxInpSynWeight = MaxInputWeightSum / InputCfg.VaryingFieldsCfg.ExternalFieldsCfg.FieldCfgCollection.Count; foreach (ExternalFieldSettings fieldCfg in InputCfg.VaryingFieldsCfg.ExternalFieldsCfg.FieldCfgCollection) { InputConnSettings inputConnCfg = new InputConnSettings(fieldCfg.Name, poolCfg.Name, 0, inputConnectionDensity ); inputConns.Add(inputConnCfg); } //Synapse general configuration AnalogSourceSettings asc = new AnalogSourceSettings(new URandomValueSettings(0, maxInpSynWeight)); SynapseATInputSettings synapseATInputSettings = new SynapseATInputSettings(Synapse.SynapticDelayMethod.Random, maxInputDelay, asc, null); SynapseATIndifferentSettings synapseATIndifferentSettings = new SynapseATIndifferentSettings(Synapse.SynapticDelayMethod.Random, maxInternalDelay); SynapseATSettings synapseATCfg = new SynapseATSettings(SynapseATSettings.DefaultSpectralRadiusNum, synapseATInputSettings, synapseATIndifferentSettings); SynapseSettings synapseCfg = new SynapseSettings(null, synapseATCfg); //Initially set all switches to false - all available predictors are forbidden bool[] predictorSwitches = new bool[PredictorsProvider.NumOfSupportedPredictors]; predictorSwitches.Populate(false); //Enable specified predictors foreach (PredictorsProvider.PredictorID predictorID in allowedPredictor) { predictorSwitches[(int)predictorID] = true; } //Create predictors configuration using default params PredictorsSettings predictorsCfg = new PredictorsSettings(predictorSwitches, predictorsParamsCfg); //Create reservoir instance ReservoirInstanceSettings resInstCfg = new ReservoirInstanceSettings(GetResInstName(ResDesign.PureESN, 0), resStructCfg.Name, new InputConnsSettings(inputConns), synapseCfg, predictorsCfg ); //Build and return SM configuration return(new StateMachineSettings(new NeuralPreprocessorSettings(InputCfg, new ReservoirStructuresSettings(resStructCfg), new ReservoirInstancesSettings(resInstCfg) ), ReadoutCfg )); }