Пример #1
0
        //Constructor
        /// <summary>
        /// Creates an initialized instance.
        /// </summary>
        /// <param name="name">The name of the input field.</param>
        /// <param name="idx">The zero-based index of the input field among other input fields.</param>
        /// <param name="coordinates">The coordinates of input neurons in 3D space.</param>
        /// <param name="dataWorkingRange">The output range of the input data.</param>
        /// <param name="featureFilterCfg">The configuration of the feature filter.</param>
        /// <param name="spikesEncodingCfg">The configuration of the spikes coder.</param>
        /// <param name="routeToReadout">Specifies whether to route the input field values to readout layer.</param>
        /// <param name="inputNeuronsStartIdx">The zero-based index of the first input neuron of this field among all other input neurons.</param>
        public InputField(string name,
                          int idx,
                          int[] coordinates,
                          Interval dataWorkingRange,
                          IFeatureFilterSettings featureFilterCfg,
                          InputSpikesCoderSettings spikesEncodingCfg,
                          bool routeToReadout,
                          int inputNeuronsStartIdx
                          )
        {
            Name            = name;
            Idx             = idx;
            RouteToReadout  = routeToReadout;
            _featureFilter  = FeatureFilterFactory.Create(dataWorkingRange, featureFilterCfg);
            _iAnalogStimuli = 0;
            _currentDataIdx = 0;
            //Spikes encoder
            _spikesEncoder = new InputSpikesCoder(spikesEncodingCfg);
            //Analog neuron
            int verticalCycles = _spikesEncoder.Regime == InputEncoder.InputSpikesCoding.Vertical ? _spikesEncoder.LargestComponentLength : 1;

            AnalogNeuron = new AnalogInputNeuron(new NeuronLocation(InputEncoder.ReservoirID, inputNeuronsStartIdx, InputEncoder.PoolID, inputNeuronsStartIdx, idx, coordinates[0], coordinates[1], coordinates[2]), verticalCycles);
            ++inputNeuronsStartIdx;
            //Spiking neurons
            int spikingPopulationSize;

            if (_spikesEncoder.Regime == InputEncoder.InputSpikesCoding.Horizontal)
            {
                //Population encoding
                spikingPopulationSize = _spikesEncoder.AllSpikesFlatCollection.Length;
            }
            else if (_spikesEncoder.Regime == InputEncoder.InputSpikesCoding.Vertical)
            {
                //Spike-train encoding
                spikingPopulationSize = _spikesEncoder.ComponentSpikesCollection.Length;
            }
            else
            {
                //Forbidden encoding
                spikingPopulationSize = 0;
            }
            SpikingNeuronCollection = new SpikingInputNeuron[spikingPopulationSize];
            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;
        }
Пример #2
0
 //Constructors
 /// <summary>
 /// Creates an initialized instance.
 /// </summary>
 /// <param name="spikesCoderCfg">The configuration of the input spikes coder.</param>
 /// <param name="externalFieldsCfg">The configuration of the external input fields.</param>
 /// <param name="transformedFieldsCfg">The configuration of the transformed input fields.</param>
 /// <param name="generatedFieldsCfg">The configuration of the generated input fields.</param>
 /// <param name="routeToReadout">Specifies whether to route the varying input fields to the readout layer.</param>
 public VaryingFieldsSettings(InputSpikesCoderSettings spikesCoderCfg,
                              ExternalFieldsSettings externalFieldsCfg,
                              TransformedFieldsSettings transformedFieldsCfg = null,
                              GeneratedFieldsSettings generatedFieldsCfg     = null,
                              bool routeToReadout = DefaultRouteToReadout
                              )
 {
     InputSpikesCoderCfg  = (InputSpikesCoderSettings)spikesCoderCfg.DeepClone();
     ExternalFieldsCfg    = (ExternalFieldsSettings)externalFieldsCfg.DeepClone();
     TransformedFieldsCfg = transformedFieldsCfg == null ? null : (TransformedFieldsSettings)transformedFieldsCfg.DeepClone();
     GeneratedFieldsCfg   = generatedFieldsCfg == null ? null : (GeneratedFieldsSettings)generatedFieldsCfg.DeepClone();
     RouteToReadout       = routeToReadout;
     Check();
     return;
 }
Пример #3
0
        /// <summary>
        /// Creates an initialized instance.
        /// </summary>
        /// <param name="elem">A xml element containing the configuration data.</param>
        public VaryingFieldsSettings(XElement elem)
        {
            //Validation
            XElement settingsElem = Validate(elem, XsdTypeName);

            //Parsing
            InputSpikesCoderCfg = new InputSpikesCoderSettings(settingsElem.Elements("spikesCoder").First());
            ExternalFieldsCfg   = new ExternalFieldsSettings(settingsElem.Elements("externalFields").First());
            XElement transformedFieldsElem = settingsElem.Elements("transformedFields").FirstOrDefault();

            TransformedFieldsCfg = transformedFieldsElem == null ? null : new TransformedFieldsSettings(transformedFieldsElem);
            XElement generatedFieldsElem = settingsElem.Elements("generatedFields").FirstOrDefault();

            GeneratedFieldsCfg = generatedFieldsElem == null ? null : new GeneratedFieldsSettings(generatedFieldsElem);
            RouteToReadout     = bool.Parse(settingsElem.Attribute("routeToReadout").Value);
            Check();
            return;
        }
Пример #4
0
        //Constructor
        /// <summary>
        /// Creates an initialized instance.
        /// </summary>
        /// <param name="cfg">The configuration of the coder.</param>
        public InputSpikesCoder(InputSpikesCoderSettings cfg)
        {
            _encodingCfg           = (InputSpikesCoderSettings)cfg.DeepClone();
            _coderCollection       = new List <A2SCoderBase>(_encodingCfg.CoderCfgCollection.Count);
            _numOfComponents       = 0;
            LargestComponentLength = 0;
            foreach (RCNetBaseSettings coderCfg in _encodingCfg.CoderCfgCollection)
            {
                A2SCoderBase coder = A2SCoderFactory.Create(coderCfg);
                _coderCollection.Add(coder);
                _numOfComponents      += coder.NumOfComponents;
                LargestComponentLength = Math.Max(LargestComponentLength, coder.BaseCodeLength);
            }
            ComponentSpikesCollection = new byte[_numOfComponents][];
            switch (_encodingCfg.Regime)
            {
            case InputEncoder.InputSpikesCoding.Forbidden:
            {
                AllSpikesFlatCollection = new byte[0];
            }
            break;

            case InputEncoder.InputSpikesCoding.Horizontal:
            {
                int idx             = 0;
                int allSpikesLength = 0;
                foreach (A2SCoderBase coder in _coderCollection)
                {
                    for (int i = 0; i < coder.NumOfComponents; i++)
                    {
                        ComponentSpikesCollection[idx] = new byte[coder.BaseCodeLength];
                        ComponentSpikesCollection[idx].Populate((byte)0);
                        allSpikesLength += coder.BaseCodeLength;
                        ++idx;
                    }
                }
                AllSpikesFlatCollection = new byte[allSpikesLength];
                AllSpikesFlatCollection.Populate((byte)0);
            }
            break;

            case InputEncoder.InputSpikesCoding.Vertical:
            {
                int idx             = 0;
                int allSpikesLength = 0;
                foreach (A2SCoderBase coder in _coderCollection)
                {
                    for (int i = 0; i < coder.NumOfComponents; i++)
                    {
                        ComponentSpikesCollection[idx] = new byte[LargestComponentLength];
                        ComponentSpikesCollection[idx].Populate((byte)0);
                        allSpikesLength += coder.BaseCodeLength;
                        ++idx;
                    }
                }
                AllSpikesFlatCollection = new byte[allSpikesLength];
                AllSpikesFlatCollection.Populate((byte)0);
            }
            break;
            }

            return;
        }
Пример #5
0
 /// <summary>
 /// The deep copy constructor.
 /// </summary>
 /// <param name="source">The source instance.</param>
 public InputSpikesCoderSettings(InputSpikesCoderSettings source)
     : this(source.Regime, source.CoderCfgCollection)
 {
     return;
 }