//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; }
//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; }
/// <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; }
//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; }
/// <summary> /// The deep copy constructor. /// </summary> /// <param name="source">The source instance.</param> public InputSpikesCoderSettings(InputSpikesCoderSettings source) : this(source.Regime, source.CoderCfgCollection) { return; }