Esempio n. 1
0
 void Connect(Link pre,Node post,Weight weight)
 {
     Connection i=new Connection(weight);
     pre.Next[Utility.FirstNull(pre.Next)]=i;
     post.Previous[Utility.FirstNull(post.Previous)]=i;
     i.Previous=pre;
     i.Next=post;
     i.Identity=string.Format("{0} --> {1}",i.Previous.Identity,i.Next.Identity);
 }
Esempio n. 2
0
 void Map(Link a,Link b,Weight weight,Dictionary<Link,List<Connection>> map)
 {
     Connection connection=new Connection(weight,a,(NeuronBase)b);
     if(!map.ContainsKey(a))
         map[a]=new List<Connection>();
     map[a].Add(connection);
     if(!map.ContainsKey(b))
         map[b]=new List<Connection>();
     map[b].Add(connection);
 }
Esempio n. 3
0
 public override void Pulse(Connection sender,double value)
 {
     PendingValue+=sender.Calculate(value);
     if(++SignalsReceived<Previous.Length)
         return;
     SignalsReceived=0;
     double output=Func.Activation(PendingValue);
     LastInputSignal=PendingValue;
     LastOutputSignal=output;
     if(Inspector!=null && Inspector.TraceLevel>=1)
         Inspector.Trace(this,"Input sum={0}, output={1}",PendingValue,output);
     if(Next!=null)
         foreach(Connection i in Next)
             i.Next.Pulse(i,output);
     PendingValue=0;
 }
Esempio n. 4
0
        protected NetworkStructure GetStructure(XElement root)
        {
            var unitElems=root.Elements("unit");
            var weightElems=root.Elements("weight");
            Dictionary<string,Tuple<Link,int>> unitsMap=GetUnits(unitElems).ToDictionary(pair => pair.Item1.GetDescription() ,pair => pair);
            Dictionary<string,Weight> weightsMap=GetWeights(weightElems).ToDictionary(pair => pair.Item1,pair => pair.Item2);
            var connectionElems=root.Elements("connection");
            Dictionary<Link,List<Connection>> mapNext=new Dictionary<Link,List<Connection>>();
            Dictionary<Link,List<Connection>> mapPrevious=new Dictionary<Link,List<Connection>>();

            foreach(XElement element in connectionElems){
                Connection c=new Connection(weightsMap[element.Value],unitsMap[element.Attribute("from").Value].Item1,(NeuronBase)unitsMap[element.Attribute("to").Value].Item1);
                if(!mapNext.ContainsKey(c.Previous))
                    mapNext.Add(c.Previous,new List<Connection>());
                mapNext[c.Previous].Add(c);
                if(!mapPrevious.ContainsKey(c.Next))
                    mapPrevious.Add(c.Next,new List<Connection>());
                mapPrevious[c.Next].Add(c);
            }
            Link[] structure=unitsMap.Select(x => x.Value.Item1).ToArray();
            foreach(Link link in structure) {
                if(mapNext.ContainsKey(link))
                    link.Next=mapNext[link].ToArray();
                if(link is NeuronBase)
                    if(mapPrevious.ContainsKey(link))
                        ((NeuronBase)link).Previous=mapPrevious[link].ToArray();
            }
            Bias bias=unitsMap.Select(x => x.Value.Item1).FirstOrDefault(x => x is Bias) as Bias;

            int layersCount=int.Parse(root.Element("layers").Value);
            List<List<Link>> layers=new List<List<Link>>(layersCount);
            for(var i=0;i<layersCount;i++)
                layers.Add(new List<Link>());

            foreach(var kvp in unitsMap) {
                int l=kvp.Value.Item2;
                if(l!=-1)
                    layers[l].Add(kvp.Value.Item1);
            }
            return new NetworkStructure(layers.Select(x => x.ToArray()).ToArray(),bias);
        }
Esempio n. 5
0
 public override void Pulse(Connection sender,double value)
 {
     throw new NotImplementedException(); //todo
 }
Esempio n. 6
0
 public abstract void Pulse(Connection sender,double value);