Exemple #1
0
        public void DFFNeuralNetwork_InitializesLayers()
        {
            // Arrange
            var network = new DFFNeuralNetwork();

            // Assert
            Assert.IsNotNull(network.Layers);
        }
Exemple #2
0
        public void ApplyInputs_WithValidNetwork_PropogatesNetworkInputs()
        {
            // Arrange
            var network = new DFFNeuralNetwork(1, 1, 2, 2);

            var inputs = new List <INetworkInput>()
            {
                new NetworkInput()
                {
                    ActivationLevel = .75
                }
            };

            network.RandomizeNetwork();

            IInputNeuron        input1            = network.Layers.OfType <IInputLayer>().First().Neurons.First() as IInputNeuron;
            IOutgoingConnection input1Hidden1Conn = input1.Connections.OfType <IOutgoingConnection>().First();
            IOutgoingConnection input1Hidden2Conn = input1.Connections.OfType <IOutgoingConnection>().ToList()[1];

            IHiddenNeuron       hidden1            = input1Hidden1Conn.ToNeuron as IHiddenNeuron;
            IOutgoingConnection hidden1Output1Conn = hidden1.Connections.OfType <IOutgoingConnection>().First();
            IOutgoingConnection hidden1Output2Conn = hidden1.Connections.OfType <IOutgoingConnection>().ToList()[1];

            IHiddenNeuron       hidden2            = input1Hidden2Conn.ToNeuron as IHiddenNeuron;
            IOutgoingConnection hidden2Output1Conn = hidden2.Connections.OfType <IOutgoingConnection>().First();
            IOutgoingConnection hidden2Output2Conn = hidden2.Connections.OfType <IOutgoingConnection>().ToList()[1];

            IOutputNeuron output1 = hidden1Output1Conn.ToNeuron as IOutputNeuron;
            IOutputNeuron output2 = hidden1Output2Conn.ToNeuron as IOutputNeuron;

            // Act
            network.ApplyInputs(inputs);

            var           outputLayer  = network.Layers.OfType <IOutputLayer>().First();
            IOutputNeuron output1After = outputLayer.Neurons.First() as IOutputNeuron;
            IOutputNeuron output2After = outputLayer.Neurons.ToList()[1] as IOutputNeuron;

            // sigmoid function : (1.0 / (1 + Math.Exp(-1.0 * value)));

            var h1Activation = ApplyActivationFunction((.75 * input1Hidden1Conn.Weight) + hidden1.Bias);
            var h2Activation = ApplyActivationFunction((.75 * input1Hidden2Conn.Weight) + hidden2.Bias);
            var o1Activation = ApplyActivationFunction((h1Activation * hidden1Output1Conn.Weight) + (h2Activation * hidden2Output1Conn.Weight) + output1.Bias);
            var o2Activation = ApplyActivationFunction((h1Activation * hidden1Output2Conn.Weight) + (h2Activation * hidden2Output2Conn.Weight) + output2.Bias);

            // Assert
            Assert.IsTrue(o1Activation == output1After.ActivationLevel);
            Assert.IsTrue(o2Activation == output2After.ActivationLevel);
        }
Exemple #3
0
        public void DFFNeuralNetwork_WithLayers_InitializesLayers()
        {
            // Arrange
            var layers = new List <INetworkLayer>()
            {
                _inputLayer, _hiddenLayer, _outputLayer
            };

            // Act
            var network = new DFFNeuralNetwork(layers);

            // Assert
            Assert.IsNotNull(network.Layers);
            Assert.IsTrue(network.Layers.Count() == 3);
            Assert.IsTrue(network.Layers.Contains(_inputLayer));
            Assert.IsTrue(network.Layers.Contains(_hiddenLayer));
            Assert.IsTrue(network.Layers.Contains(_outputLayer));
        }
        /// <summary>
        /// Creates and returns a neural network using configuration settings in the <paramref name="networkConfiguration"/> and the <paramref name="trainingEntry"/>.
        /// </summary>
        /// <param name="networkConfiguration"></param>
        /// <param name="trainingDatasetEntries"></param>
        /// <returns>Returns a neural network using configuration settings in the <paramref name="networkConfiguration"/> and the <paramref name="trainingEntry"/>.</returns>
        private IDFFNeuralNetwork CreateNetwork(N networkConfiguration, INetworkTrainingIteration trainingEntry)
        {
            if (trainingEntry == null || trainingEntry.Inputs == null || trainingEntry.Outputs == null)
            {
                throw new ArgumentNullException("trainingEntry");
            }

            var numInputs             = trainingEntry.Inputs.Count();
            var numOutputs            = trainingEntry.Outputs.Count();
            var numHiddenLayers       = networkConfiguration.NumHiddenLayers;
            var numHiddenLayerNeurons = networkConfiguration.NumHiddenLayerNeurons;

            // Setup and randomize network.
            var network = new DFFNeuralNetwork(numInputs, numHiddenLayers, numHiddenLayerNeurons, numOutputs);

            network.RandomizeNetwork();

            return(network);
        }