Esempio n. 1
0
        public IEnumerable <IEnumerable <TUnit> > Clean(IEnumerable <IEnumerable <TUnitUnderTraining> > network)
        {
            var unitMapper = network.SelectMany(u => u).ToDictionary(u => u, CreateCleanUnit);
            var newNetwork = new List <IEnumerable <TUnit> >();

            foreach (var layer in network)
            {
                var newLayer = new List <TUnit>();
                layer.Enumerate(oldUnit => newLayer.Add(unitMapper[oldUnit]));
                newNetwork.Add(newLayer);
            }

            var oldConnections = unitMapper.SelectMany(u => u.Key.OutgoingConnections);

            oldConnections.Enumerate(c =>
            {
                var thisNewUnit                 = unitMapper[c.InputUnit];
                var otherNewUnit                = unitMapper[c.OutputUnit];
                var newConnection               = TraversableConnection <IUnit, IConnection, IUnitActivation <IUnit> > .CreateConnection <Connection>(thisNewUnit, otherNewUnit);
                newConnection.Properties.Name   = c.Properties.Name;
                newConnection.Properties.Weight = c.Properties.Weight;
            });

            //Map network to multifolds
            unitMapper.Select(u => u.Value.UnitActivation).Where(ua => ua is TUnitActivationMultiFold).Cast <TUnitActivationMultiFold>().Enumerate(ua => ua.Network = newNetwork);

            return(newNetwork);
        }
Esempio n. 2
0
 private static void ConnectUnits(GenericNetworkBuilderState <TUnit, TConnection, TUnitActivation> state)
 {
     // Connect everything
     for (var i = 0; i < state.Network.Count - 1; i++)
     {
         var thisLayer = state.Network.ElementAt(i);
         var nextLayer = state.Network.ElementAt(i + 1);
         thisLayer.EnumerateCartesian(nextLayer, (l1, l2) => TraversableConnection <TUnit, TConnection, TUnitActivation> .CreateConnection <TConnectionImpl>(l1, l2));
     }
 }
Esempio n. 3
0
 private ITraversableConnection <IUnitUnderTraining, IConnectionUnderTraining, IUnitActivationTraining> CreateConnection(ITraversableUnit <IUnitUnderTraining, IConnectionUnderTraining, IUnitActivationTraining> input, ITraversableUnit <IUnitUnderTraining, IConnectionUnderTraining, IUnitActivationTraining> output)
 {
     return(TraversableConnection <IUnitUnderTraining, IConnectionUnderTraining, IUnitActivationTraining> .CreateConnection <ConnectionUnderTraining>(input, output));
 }