public void HiddenLayer_WithSortOrder_InitializesProperty()
        {
            // Arrange
            _layer = new HiddenLayer(5);

            // Assert
            Assert.IsTrue(_layer.SortOrder == 5);
        }
Exemplo n.º 2
0
        public void Initialize()
        {
            _network     = new DFFNeuralNetwork(_inputLayerNeuronCount, _hiddenLayersCount, _hiddenLayerNeuronCount, _outputLayerNeuronCount);
            _inputLayer  = _network.Layers.OfType <IInputLayer>().First();
            _outputLayer = _network.Layers.OfType <IOutputLayer>().First();
            _hiddenLayer = _network.Layers.OfType <IHiddenLayer>().First();

            _trainingIterations = new List <INetworkTrainingIteration>();
        }
        public void HiddenLayer_WithSortOrderAndNeurons_InitializesProperty()
        {
            // Arrange
            var hiddenNeuron = new HiddenNeuron();

            _layer = new HiddenLayer(5, new List <IHiddenNeuron>()
            {
                hiddenNeuron
            });

            // Assert
            Assert.IsTrue(_layer.Neurons.Count() == 1);
            Assert.IsTrue(_layer.Neurons.First() == hiddenNeuron);
        }
 public void Initialize()
 {
     _layer = new HiddenLayer(1);
 }
Exemplo n.º 5
0
        /// <summary>
        /// Creates a NetworkTopology from a text file.
        /// </summary>
        /// <param name="file">The location of the file to read from.</param>
        /// <param name="objectFactories">The object factories that will
        /// be used to tranform the text types into objects.</param>
        /// <param name="settings">The currently loaded NetworkSettings.</param>
        /// <returns>Returns the NetworkTopology located inside of the file.
        /// If the file can not be parsed null is returned.</returns>
        /// <exception cref="IOException">System.IO.IOException</exception>
        private static NetworkTopology LoadText(
            string file,
            ref Dictionary<string, IUserObjectFactory> objectFactories,
            ref NetworkSettings settings)
        {
            //Check to varify that the file can be loaded.
            if (GetVersion(file) != "1.0") return null;

            NetworkTopology topology = new NetworkTopology();
            //Retrieves the RawTypes from the file
            List<RawType> rawTypes = GetRawTypes(file);

            Dictionary<string, IHiddenLayer> hiddenLayers = new Dictionary<string, IHiddenLayer>();
            //Factory to create the object with
            string factoryName;

            //Transforms all the rawTypes into objects
            for (int i = 0; i < rawTypes.Count; i++)
            {
                factoryName = settings.DefaultFactory;
                if (rawTypes[i].Fields.ContainsKey("factory")) factoryName = rawTypes[i].Fields["factory"];
                if (rawTypes[i].Type == "layer")
                {

                    if (rawTypes[i].Fields["type"] == "hidden")
                    {
                        hiddenLayers.Add(rawTypes[i].Fields["layerName"],
                            objectFactories[factoryName].CreateUserObject<IHiddenLayer>(
                            rawTypes[i].Fields["dataType"],
                            rawTypes[i].Fields));
                    }
                    else if (rawTypes[i].Fields["type"] == "output")
                    {
                        topology.OutputLayer =
                            objectFactories[factoryName].CreateUserObject<IOutputLayer>(
                            rawTypes[i].Fields["dataType"], rawTypes[i].Fields);
                    }
                    else if (rawTypes[i].Fields["type"] == "input")
                    {
                        topology.InputLayer =
                            objectFactories[factoryName].CreateUserObject<IInputLayer>(
                            rawTypes[i].Fields["dataType"], rawTypes[i].Fields);
                    }
                }
                else if (rawTypes[i].Type == "node")
                {
                    INode node = objectFactories[factoryName].CreateUserObject<INode>(
                        rawTypes[i].Fields["dataType"], rawTypes[i].Fields);
                    if (hiddenLayers.ContainsKey(rawTypes[i].Fields["layer"]))
                    {
                        hiddenLayers[rawTypes[i].Fields["layer"]].SetNode(node, -1);
                    }
                }
                else if (rawTypes[i].Type == "preprocessor")
                {
                    topology.PreProcessor =
                        objectFactories[factoryName].CreateUserObject<IPreProcessor>(
                        rawTypes[i].Fields["dataType"], rawTypes[i].Fields);
                    if(settings.Mode == NetworkMode.Training)
                        topology.TrainingPreProcessor =
                            objectFactories[factoryName].CreateUserObject<ITrainingPreProcessor>(
                                rawTypes[i].Fields["dataType"], rawTypes[i].Fields);
                }
                else if (rawTypes[i].Type == "postprocessor")
                {
                    topology.PostProcessor = objectFactories[factoryName].
                        CreateUserObject<IPostProcessor>(rawTypes[i].Fields["dataType"], rawTypes[i].Fields);
                }
                else if (rawTypes[i].Type == "topology")
                {
                    topology.MetaData = rawTypes[i].Fields;
                    if(!rawTypes[i].Fields.ContainsKey("algorithmFactory"))
                    {
                        rawTypes[i].Fields.Add("algorithmFactory", factoryName);
                    }
                    topology.TrainingAlgorithm = objectFactories[rawTypes[i].Fields["algorithmFactory"]].
                        CreateUserObject<ITrainingAlgorithm>(
                            rawTypes[i].Fields["trainingAlgorithm"],
                            rawTypes[i].Fields);
                }
            }

            //This tranformation is required because nodes are linked to hidden layers
            //by names. The name of the layer is the key in the dictionary.
            IHiddenLayer[] layer = new IHiddenLayer[hiddenLayers.Count];
            int j = 0;
            foreach (KeyValuePair<string, IHiddenLayer> temp in hiddenLayers)
            {
                layer[j] = temp.Value;
                j++;
            }
            topology.HiddenLayers = layer;
            return topology;
        }
Exemplo n.º 6
0
        /// <summary>
        /// Creates a NetworkTopology from a text file.
        /// </summary>
        /// <param name="file">The location of the file to read from.</param>
        /// <param name="objectFactories">The object factories that will
        /// be used to tranform the text types into objects.</param>
        /// <param name="settings">The currently loaded NetworkSettings.</param>
        /// <returns>Returns the NetworkTopology located inside of the file.
        /// If the file can not be parsed null is returned.</returns>
        /// <exception cref="IOException">System.IO.IOException</exception>
        private static NetworkTopology LoadText(
            string file,
            ref Dictionary <string, IUserObjectFactory> objectFactories,
            ref NetworkSettings settings)
        {
            //Check to varify that the file can be loaded.
            if (GetVersion(file) != "1.0")
            {
                return(null);
            }

            NetworkTopology topology = new NetworkTopology();
            //Retrieves the RawTypes from the file
            List <RawType> rawTypes = GetRawTypes(file);

            Dictionary <string, IHiddenLayer> hiddenLayers = new Dictionary <string, IHiddenLayer>();
            //Factory to create the object with
            string factoryName;

            //Transforms all the rawTypes into objects
            for (int i = 0; i < rawTypes.Count; i++)
            {
                factoryName = settings.DefaultFactory;
                if (rawTypes[i].Fields.ContainsKey("factory"))
                {
                    factoryName = rawTypes[i].Fields["factory"];
                }
                if (rawTypes[i].Type == "layer")
                {
                    if (rawTypes[i].Fields["type"] == "hidden")
                    {
                        hiddenLayers.Add(rawTypes[i].Fields["layerName"],
                                         objectFactories[factoryName].CreateUserObject <IHiddenLayer>(
                                             rawTypes[i].Fields["dataType"],
                                             rawTypes[i].Fields));
                    }
                    else if (rawTypes[i].Fields["type"] == "output")
                    {
                        topology.OutputLayer =
                            objectFactories[factoryName].CreateUserObject <IOutputLayer>(
                                rawTypes[i].Fields["dataType"], rawTypes[i].Fields);
                    }
                    else if (rawTypes[i].Fields["type"] == "input")
                    {
                        topology.InputLayer =
                            objectFactories[factoryName].CreateUserObject <IInputLayer>(
                                rawTypes[i].Fields["dataType"], rawTypes[i].Fields);
                    }
                }
                else if (rawTypes[i].Type == "node")
                {
                    INode node = objectFactories[factoryName].CreateUserObject <INode>(
                        rawTypes[i].Fields["dataType"], rawTypes[i].Fields);
                    if (hiddenLayers.ContainsKey(rawTypes[i].Fields["layer"]))
                    {
                        hiddenLayers[rawTypes[i].Fields["layer"]].SetNode(node, -1);
                    }
                }
                else if (rawTypes[i].Type == "preprocessor")
                {
                    topology.PreProcessor =
                        objectFactories[factoryName].CreateUserObject <IPreProcessor>(
                            rawTypes[i].Fields["dataType"], rawTypes[i].Fields);
                    if (settings.Mode == NetworkMode.Training)
                    {
                        topology.TrainingPreProcessor =
                            objectFactories[factoryName].CreateUserObject <ITrainingPreProcessor>(
                                rawTypes[i].Fields["dataType"], rawTypes[i].Fields);
                    }
                }
                else if (rawTypes[i].Type == "postprocessor")
                {
                    topology.PostProcessor = objectFactories[factoryName].
                                             CreateUserObject <IPostProcessor>(rawTypes[i].Fields["dataType"], rawTypes[i].Fields);
                }
                else if (rawTypes[i].Type == "topology")
                {
                    topology.MetaData = rawTypes[i].Fields;
                    if (!rawTypes[i].Fields.ContainsKey("algorithmFactory"))
                    {
                        rawTypes[i].Fields.Add("algorithmFactory", factoryName);
                    }
                    topology.TrainingAlgorithm = objectFactories[rawTypes[i].Fields["algorithmFactory"]].
                                                 CreateUserObject <ITrainingAlgorithm>(
                        rawTypes[i].Fields["trainingAlgorithm"],
                        rawTypes[i].Fields);
                }
            }

            //This tranformation is required because nodes are linked to hidden layers
            //by names. The name of the layer is the key in the dictionary.
            IHiddenLayer[] layer = new IHiddenLayer[hiddenLayers.Count];
            int            j     = 0;

            foreach (KeyValuePair <string, IHiddenLayer> temp in hiddenLayers)
            {
                layer[j] = temp.Value;
                j++;
            }
            topology.HiddenLayers = layer;
            return(topology);
        }