예제 #1
0
        //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;
        }
예제 #2
0
 //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;
 }
예제 #3
0
        /// <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;
        }
예제 #4
0
 //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;
 }
예제 #5
0
        //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;
        }
예제 #6
0
        /// <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;
        }
예제 #7
0
 /// <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;
 }