コード例 #1
0
 //Constructors
 /// <summary>
 /// Creates an unitialized instance.
 /// </summary>
 public ReservoirInstanceDefinition()
 {
     InstanceID                = 0;
     InstanceName              = string.Empty;
     Settings                  = null;
     PredictorsCfg             = null;
     NPInputFieldIdxCollection = new List <int>();
     InputConnectionCollection = new List <InputConnection>();
     return;
 }
コード例 #2
0
 /// <summary>
 /// The deep copy constructor.
 /// </summary>
 /// <param name="source">Source instance</param>
 public ReservoirInstanceDefinition(ReservoirInstanceDefinition source)
 {
     InstanceID   = source.InstanceID;
     InstanceName = source.InstanceName;
     Settings     = source.Settings.DeepClone();
     NPInputFieldIdxCollection = new List <int>(source.NPInputFieldIdxCollection);
     InputConnectionCollection = new List <InputConnection>(source.InputConnectionCollection.Count);
     foreach (InputConnection ifa in source.InputConnectionCollection)
     {
         InputConnectionCollection.Add(ifa.DeepClone());
     }
     PredictorsCfg = source.PredictorsCfg?.DeepClone();
     return;
 }
コード例 #3
0
 //Constructors
 /// <summary>
 /// The deep copy constructor
 /// </summary>
 /// <param name="source">Source instance</param>
 public NeuronGroupSettings(NeuronGroupSettings source)
 {
     Name                     = source.Name;
     Role                     = source.Role;
     RelativeShare            = source.RelativeShare;
     ReadoutNeuronsDensity    = source.ReadoutNeuronsDensity;
     Count                    = source.Count;
     ActivationType           = source.ActivationType;
     ActivationCfg            = ActivationFactory.DeepCloneActivationSettings(source.ActivationCfg);
     SignalingRestriction     = source.SignalingRestriction;
     BiasCfg                  = source.BiasCfg?.DeepClone();
     AnalogFiringThreshold    = source.AnalogFiringThreshold;
     RetainmentNeuronsDensity = source.RetainmentNeuronsDensity;
     RetainmentStrengthCfg    = source.RetainmentStrengthCfg?.DeepClone();
     PredictorsCfg            = source.PredictorsCfg?.DeepClone();
     return;
 }
コード例 #4
0
        /// <summary>
        /// Creates the instance and initialize it from given xml element.
        /// </summary>
        /// <param name="elem">
        /// Xml data containing pool settings.
        /// Content of xml element is always validated against the xml schema.
        /// </param>
        public PoolSettings(XElement elem)
        {
            //Validation
            ElemValidator validator     = new ElemValidator();
            Assembly      assemblyRCNet = Assembly.GetExecutingAssembly();

            validator.AddXsdFromResources(assemblyRCNet, "RCNet.Neural.Network.SM.Preprocessing.PoolSettings.xsd");
            validator.AddXsdFromResources(assemblyRCNet, "RCNet.RCNetTypes.xsd");
            XElement poolSettingsElem = validator.Validate(elem, "rootElem");

            //Parsing
            //Name
            Name = poolSettingsElem.Attribute("name").Value;
            //Dimensions
            Dim = new PoolDimensions(int.Parse(poolSettingsElem.Attribute("x").Value, CultureInfo.InvariantCulture),
                                     int.Parse(poolSettingsElem.Attribute("y").Value, CultureInfo.InvariantCulture),
                                     int.Parse(poolSettingsElem.Attribute("z").Value, CultureInfo.InvariantCulture),
                                     int.Parse(poolSettingsElem.Attribute("dimX").Value, CultureInfo.InvariantCulture),
                                     int.Parse(poolSettingsElem.Attribute("dimY").Value, CultureInfo.InvariantCulture),
                                     int.Parse(poolSettingsElem.Attribute("dimZ").Value, CultureInfo.InvariantCulture)
                                     );
            //NeuronGroups
            XElement neuronGroupsElem = poolSettingsElem.Descendants("neuronGroups").First();
            double   totalRelShare    = 0;

            NeuronGroups = new List <NeuronGroupSettings>();
            //Analog neuron groups
            foreach (XElement neuronGroupElem in neuronGroupsElem.Descendants("analogGroup"))
            {
                NeuronGroupSettings ngs = new NeuronGroupSettings(neuronGroupElem, ActivationType.Analog);
                if (ngs.RelativeShare > 0)
                {
                    NeuronGroups.Add(ngs);
                    totalRelShare += ngs.RelativeShare;
                }
            }
            //Spiking neuron groups
            foreach (XElement neuronGroupElem in neuronGroupsElem.Descendants("spikingGroup"))
            {
                NeuronGroupSettings ngs = new NeuronGroupSettings(neuronGroupElem, ActivationType.Spiking);
                if (ngs.RelativeShare > 0)
                {
                    NeuronGroups.Add(ngs);
                    totalRelShare += ngs.RelativeShare;
                }
            }
            //Neuron groups counts
            int totalCount = 0;

            foreach (NeuronGroupSettings ngs in NeuronGroups)
            {
                double ratio = ngs.RelativeShare / totalRelShare;
                ngs.Count   = (int)Math.Round(((double)Dim.Size) * ratio, 0);
                totalCount += ngs.Count;
            }
            while (totalCount != Dim.Size)
            {
                //Correction of neuron counts
                int sign = Math.Sign(Dim.Size - totalCount);
                if (sign < 0)
                {
                    NeuronGroups.Sort(NeuronGroupSettings.Comparer_desc);
                }
                else
                {
                    NeuronGroups.Sort(NeuronGroupSettings.Comparer_asc);
                }
                NeuronGroups[0].Count += sign;
                totalCount            += sign;
                if (NeuronGroups[0].Count < 0)
                {
                    throw new Exception("Can't set proper neuron counts for the neuron groups.");
                }
            }

            //Predictors
            XElement predictorsElem = poolSettingsElem.Descendants("predictors").FirstOrDefault();

            if (predictorsElem != null)
            {
                PredictorsCfg = new HiddenNeuronPredictorsSettings(predictorsElem);
            }

            //Interconnection
            XElement interconnectionElem = poolSettingsElem.Descendants("interconnection").First();

            InterconnectionCfg = new InterconnectionSettings(interconnectionElem);
            return;
        }
コード例 #5
0
            /// <summary>
            /// Creates the instance and initialize it from given xml element.
            /// </summary>
            /// <param name="elem">
            /// Xml data containing settings.
            /// Content of xml element is always validated against the appropriate xml schema.
            /// </param>
            /// <param name="activationType">Specifies sub-type of the neuron group</param>
            public NeuronGroupSettings(XElement elem, ActivationType activationType)
            {
                //Validation
                ElemValidator validator     = new ElemValidator();
                Assembly      assemblyRCNet = Assembly.GetExecutingAssembly();

                if (activationType == ActivationType.Analog)
                {
                    validator.AddXsdFromResources(assemblyRCNet, "RCNet.Neural.Network.SM.Preprocessing.PoolAnalogNeuronGroupSettings.xsd");
                }
                else
                {
                    validator.AddXsdFromResources(assemblyRCNet, "RCNet.Neural.Network.SM.Preprocessing.PoolSpikingNeuronGroupSettings.xsd");
                }
                validator.AddXsdFromResources(assemblyRCNet, "RCNet.RCNetTypes.xsd");
                XElement settingsElem = validator.Validate(elem, "rootElem");

                ActivationType = activationType;
                //Parsing
                //Name
                Name = settingsElem.Attribute("name").Value;
                //Role
                Role = NeuronCommon.ParseNeuronRole(settingsElem.Attribute("role").Value);
                //Relative share
                RelativeShare = double.Parse(settingsElem.Attribute("relShare").Value, CultureInfo.InvariantCulture);
                //Readout neurons density
                ReadoutNeuronsDensity = double.Parse(settingsElem.Attribute("readoutDensity").Value, CultureInfo.InvariantCulture);
                //Activation settings
                ActivationCfg = ActivationFactory.LoadSettings(settingsElem.Descendants().First());
                //Bias
                XElement cfgElem = settingsElem.Descendants("bias").FirstOrDefault();

                BiasCfg = cfgElem == null ? null : new RandomValueSettings(cfgElem);
                //Spiking sub-type
                if (activationType == ActivationType.Spiking)
                {
                    SignalingRestriction     = NeuronCommon.NeuronSignalingRestrictionType.SpikingOnly;
                    AnalogFiringThreshold    = 0;
                    RetainmentNeuronsDensity = 0;
                    RetainmentStrengthCfg    = null;
                }
                else
                {
                    //Analog sub-type
                    //Output signaling restriction
                    SignalingRestriction = NeuronCommon.ParseNeuronSignalingRestriction(settingsElem.Attribute("signalingRestriction").Value);
                    //Analog firing threshold
                    cfgElem = settingsElem.Descendants("firingThreshold").FirstOrDefault();
                    AnalogFiringThreshold = cfgElem == null ? DefaultAnalogFiringThreshold : double.Parse(cfgElem.Attribute("value").Value, CultureInfo.InvariantCulture);
                    //Retainment
                    cfgElem = settingsElem.Descendants("retainment").FirstOrDefault();
                    RetainmentNeuronsDensity = 0;
                    RetainmentStrengthCfg    = null;
                    if (cfgElem != null)
                    {
                        RetainmentNeuronsDensity = double.Parse(cfgElem.Attribute("density").Value, CultureInfo.InvariantCulture);
                        RetainmentStrengthCfg    = new RandomValueSettings(cfgElem.Descendants("strength").First());
                        if (RetainmentNeuronsDensity == 0 || (RetainmentStrengthCfg.Min == 0 && RetainmentStrengthCfg.Max == 0))
                        {
                            RetainmentNeuronsDensity = 0;
                            RetainmentStrengthCfg    = null;
                        }
                    }
                }
                //Predictors
                XElement predictorsElem = settingsElem.Descendants("predictors").FirstOrDefault();

                if (predictorsElem != null)
                {
                    PredictorsCfg = new HiddenNeuronPredictorsSettings(predictorsElem);
                }
                return;
            }