예제 #1
0
            /// <summary>
            /// See the base.
            /// </summary>
            public override bool Equals(object obj)
            {
                if (obj == null)
                {
                    return(false);
                }
                NeuronGroupSettings cmpSettings = obj as NeuronGroupSettings;

                if (Name != cmpSettings.Name ||
                    Role != cmpSettings.Role ||
                    RelativeShare != cmpSettings.RelativeShare ||
                    ReadoutNeuronsDensity != cmpSettings.ReadoutNeuronsDensity ||
                    Count != cmpSettings.Count ||
                    ActivationType != cmpSettings.ActivationType ||
                    !Equals(ActivationCfg, cmpSettings.ActivationCfg) ||
                    SignalingRestriction != cmpSettings.SignalingRestriction ||
                    !Equals(BiasCfg, cmpSettings.BiasCfg) ||
                    AnalogFiringThreshold != cmpSettings.AnalogFiringThreshold ||
                    RetainmentNeuronsDensity != cmpSettings.RetainmentNeuronsDensity ||
                    !Equals(RetainmentStrengthCfg, cmpSettings.RetainmentStrengthCfg) ||
                    !Equals(PredictorsCfg, cmpSettings.PredictorsCfg)
                    )
                {
                    return(false);
                }
                return(true);
            }
예제 #2
0
 /// <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;
     AugmentedStates = source.AugmentedStates;
     Count           = source.Count;
     ActivationCfg   = ActivationFactory.DeepCloneActivationSettings(source.ActivationCfg);
     BiasCfg         = source.BiasCfg.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>
            /// See the base.
            /// </summary>
            public override bool Equals(object obj)
            {
                if (obj == null)
                {
                    return(false);
                }
                NeuronGroupSettings cmpSettings = obj as NeuronGroupSettings;

                if (Name != cmpSettings.Name ||
                    Role != cmpSettings.Role ||
                    RelativeShare != cmpSettings.RelativeShare ||
                    AugmentedStates != cmpSettings.AugmentedStates ||
                    Count != cmpSettings.Count ||
                    !Equals(ActivationCfg, cmpSettings.ActivationCfg) ||
                    !Equals(BiasCfg, cmpSettings.BiasCfg)
                    )
                {
                    return(false);
                }
                return(true);
            }
예제 #5
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;
        }
예제 #6
0
            /// <summary>
            /// Creates the deep copy instance of this instance
            /// </summary>
            public NeuronGroupSettings DeepClone()
            {
                NeuronGroupSettings clone = new NeuronGroupSettings(this);

                return(clone);
            }
예제 #7
0
 /// <summary>
 /// Descending comparer for the sort operation
 /// </summary>
 /// <param name="item1">Instance 1</param>
 /// <param name="item2">Instance 2</param>
 public static int Comparer_desc(NeuronGroupSettings item1, NeuronGroupSettings item2)
 {
     return(Math.Sign(item2.Count - item1.Count));
 }
예제 #8
0
        /// <summary>
        /// Creates the instance and initialize it from given xml element.
        /// This is the preferred way to instantiate pool settings.
        /// </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.ReservoirStructure.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)
                                     );
            //Readout neurons density
            ReadoutNeuronsDensity = double.Parse(poolSettingsElem.Attribute("readoutNeuronsDensity").Value, CultureInfo.InvariantCulture);
            //NeuronGroups
            XElement neuronGroupsElem = poolSettingsElem.Descendants("neuronGroups").First();
            double   totalRelShare    = 0;

            NeuronGroups = new List <NeuronGroupSettings>();
            foreach (XElement neuronGroupElem in neuronGroupsElem.Descendants("neuronGroup"))
            {
                NeuronGroupSettings ngs = new NeuronGroupSettings(neuronGroupElem);
                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 absolute counts for the neuron groups.");
                }
            }

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

            InterconnectionCfg = new InterconnectionSettings(interconnectionElem);
            //Retainment neurons
            XElement retainmentElem = poolSettingsElem.Descendants("retainmentNeurons").FirstOrDefault();

            RetainmentNeuronsFeature = (retainmentElem != null);
            if (RetainmentNeuronsFeature)
            {
                RetainmentNeuronsDensity = double.Parse(retainmentElem.Attribute("density").Value, CultureInfo.InvariantCulture);
                RetainmentRate           = new RandomValueSettings(retainmentElem.Descendants("rate").First());
                RetainmentNeuronsFeature = (RetainmentNeuronsDensity > 0 &&
                                            RetainmentRate.Max > 0
                                            );
            }
            else
            {
                RetainmentNeuronsDensity = 0;
            }
            return;
        }