//Constructor /// <summary> /// Creates an initialized instance /// </summary> /// <param name="spikeCodeCfg">Spike code configuration</param> public SpikeCode(SpikeCodeSettings spikeCodeCfg) { _spikeCodeCfg = (SpikeCodeSettings)spikeCodeCfg.DeepClone(); //Binary precision _precisionPiece = 1d / Math.Pow(2d, _spikeCodeCfg.ComponentHalfCodeLength); _maxPrecisionBitMask = (uint)Math.Round(Math.Pow(2d, _spikeCodeCfg.ComponentHalfCodeLength) - 1d); //Sensitivity thresholds double exponent = _spikeCodeCfg.ComponentHalfCodeLength > 1 ? Math.Pow(1d / _spikeCodeCfg.LowestThreshold, 1d / (_spikeCodeCfg.ComponentHalfCodeLength - 1d)) : 0d; _thresholdCollection = new double[_spikeCodeCfg.ComponentHalfCodeLength]; double threshold = 1d; for (int i = 0; i < _thresholdCollection.Length - 1; i++) { threshold /= exponent; _thresholdCollection[i] = threshold; } _thresholdCollection[_thresholdCollection.Length - 1] = 0; //Sub-code buffers allocation _subCodes = new byte[_spikeCodeCfg.NumOfComponents * 2][]; for (int i = 0; i < _subCodes.Length; i++) { _subCodes[i] = new byte[_spikeCodeCfg.ComponentHalfCodeLength]; } //Resulting spike-code buffer allocation Code = new byte[_subCodes.Length * _spikeCodeCfg.ComponentHalfCodeLength]; Reset(); return; }
//Constructors /// <summary> /// Creates an initialized instance /// </summary> /// <param name="name">Generated field name</param> /// <param name="generatorCfg">Configuration of associated generator</param> /// <param name="featureFilterCfg">Configuration of real feature filter</param> /// <param name="spikingCodingCfg">Configuration of spiking coding neurons</param> /// <param name="routeToReadout">Specifies whether to route generated field to readout layer together with other predictors</param> public GeneratedFieldSettings(string name, RCNetBaseSettings generatorCfg, bool routeToReadout = DefaultRouteToReadout, RealFeatureFilterSettings featureFilterCfg = null, SpikeCodeSettings spikingCodingCfg = null ) { Name = name; GeneratorCfg = generatorCfg.DeepClone(); RouteToReadout = routeToReadout; FeatureFilterCfg = featureFilterCfg == null ? null : (RealFeatureFilterSettings)featureFilterCfg.DeepClone(); SpikingCodingCfg = spikingCodingCfg == null ? null : (SpikeCodeSettings)spikingCodingCfg.DeepClone(); Check(); return; }
/// <summary> /// Creates an initialized instance. /// </summary> /// <param name="elem">Xml data containing the settings.</param> public ExternalFieldSettings(XElement elem) { //Validation XElement settingsElem = Validate(elem, XsdTypeName); //Parsing Name = settingsElem.Attribute("name").Value; RouteToReadout = bool.Parse(settingsElem.Attribute("routeToReadout").Value); FeatureFilterCfg = FeatureFilterFactory.LoadSettings(settingsElem.Elements().First()); XElement spikingCodingElem = settingsElem.Elements("spikeCode").FirstOrDefault(); SpikeCodeCfg = spikingCodingElem == null ? null : new SpikeCodeSettings(spikingCodingElem); Check(); return; }
//Constructors /// <summary> /// Creates an unitialized instance /// </summary> /// <param name="name">Input field name</param> /// <param name="featureFilterCfg">Configuration of feature filter associated with the input field</param> /// <param name="routeToReadout">Specifies whether to route input field to readout layer together with other predictors</param> /// <param name="spikeCodeCfg">Configuration of spike code</param> public ExternalFieldSettings(string name, IFeatureFilterSettings featureFilterCfg, bool routeToReadout = DefaultRouteToReadout, SpikeCodeSettings spikeCodeCfg = null ) { Name = name; FeatureFilterCfg = (IFeatureFilterSettings)featureFilterCfg.DeepClone(); RouteToReadout = routeToReadout; SpikeCodeCfg = (SpikeCodeSettings)spikeCodeCfg?.DeepClone(); if (featureFilterCfg.Type == FeatureFilterBase.FeatureType.Real && spikeCodeCfg == null) { SpikeCodeCfg = new SpikeCodeSettings(); } Check(); return; }
//Constructor /// <summary> /// Creates an initialized instance /// </summary> /// <param name="name">Name of the input field</param> /// <param name="idx">Index of the input field</param> /// <param name="coordinates">Input coordinates (entry point)</param> /// <param name="dataWorkingRange">Input data range</param> /// <param name="featureFilterCfg">Feature filter configuration</param> /// <param name="spikeCodeCfg">Configuration of the input spike code</param> /// <param name="routeToReadout">Specifies whether to route values as the additional predictors to readout</param> /// <param name="inputNeuronsStartIdx">Index of the first input neuron of this unit among all input neurons</param> public InputField(string name, int idx, int[] coordinates, Interval dataWorkingRange, IFeatureFilterSettings featureFilterCfg, SpikeCodeSettings spikeCodeCfg, bool routeToReadout, int inputNeuronsStartIdx ) { Name = name; Idx = idx; RouteToReadout = routeToReadout; _featureFilter = FeatureFilterFactory.Create(dataWorkingRange, featureFilterCfg); //Analog neuron AnalogNeuron = new AnalogInputNeuron(new NeuronLocation(InputEncoder.ReservoirID, inputNeuronsStartIdx, InputEncoder.PoolID, inputNeuronsStartIdx, idx, coordinates[0], coordinates[1], coordinates[2])); ++inputNeuronsStartIdx; //Spiking neurons _realSpikeCode = null; int populationSize = -1; switch (_featureFilter.Type) { case FeatureFilterBase.FeatureType.Real: _realSpikeCode = new SpikeCode(spikeCodeCfg); populationSize = _realSpikeCode.Code.Length; break; case FeatureFilterBase.FeatureType.Binary: populationSize = 1; break; case FeatureFilterBase.FeatureType.Enum: populationSize = ((EnumFeatureFilterSettings)featureFilterCfg).NumOfElements; break; } SpikingNeuronCollection = new SpikingInputNeuron[populationSize]; for (int i = 0; i < SpikingNeuronCollection.Length; i++) { SpikingNeuronCollection[i] = new SpikingInputNeuron(new NeuronLocation(InputEncoder.ReservoirID, inputNeuronsStartIdx, InputEncoder.PoolID, inputNeuronsStartIdx, idx, coordinates[0], coordinates[1], coordinates[2])); ++inputNeuronsStartIdx; } return; }
/// <summary> /// Creates an initialized instance. /// </summary> /// <param name="elem">Xml data containing the settings.</param> public GeneratedFieldSettings(XElement elem) { //Validation XElement settingsElem = Validate(elem, XsdTypeName); //Parsing Name = settingsElem.Attribute("name").Value; RouteToReadout = bool.Parse(settingsElem.Attribute("routeToReadout").Value); XElement genElem = settingsElem.Elements().First(); GeneratorCfg = GeneratorFactory.LoadSettings(genElem); XElement realFeatureFilterElem = settingsElem.Elements("realFeatureFilter").FirstOrDefault(); FeatureFilterCfg = realFeatureFilterElem == null ? new RealFeatureFilterSettings() : new RealFeatureFilterSettings(realFeatureFilterElem); XElement spikingCodingElem = settingsElem.Elements("spikingCoding").FirstOrDefault(); SpikingCodingCfg = spikingCodingElem == null ? new SpikeCodeSettings() : new SpikeCodeSettings(spikingCodingElem); Check(); return; }
/// <summary> /// The deep copy constructor. /// </summary> /// <param name="source">Source instance</param> public SpikeCodeSettings(SpikeCodeSettings source) : this(source.ComponentHalfCodeLength, source.LowestThreshold, source.ThresholdFullSpikeSet, source.SignalComponent, source.DeltaComponent, source.BinaryComponent) { return; }