Exemplo n.º 1
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);
        }
        /// <summary>
        /// Creates the incoming and outgoing connections between this neuron and a previous hidden neuron.
        /// </summary>
        /// <param name="incomingNeuron">The incoming neuron to connect this neuron to.</param>
        public void GenerateConnectionsWith(IHiddenNeuron incomingNeuron)
        {
            if (incomingNeuron == null)
            {
                throw new ArgumentNullException("incomingNeuron");
            }

            // Create connection only if this neuron doesn't already have an incoming connection from the incoming hidden neuron.
            if (!GetIncomingConnections().Any(c => c.FromNeuron == incomingNeuron))
            {
                Connections.Add(new IncomingConnection(incomingNeuron));
            }

            // Create connection only if the incoming hidden neuron doesn't already have an outgoing connection to this neuron.
            if (!incomingNeuron.GetOutgoingConnections().Any(c => c.ToNeuron == this))
            {
                incomingNeuron.Connections.Add(new OutgoingConnection(this));
            }
        }
Exemplo n.º 3
0
 public void Initialize()
 {
     _neuron     = new HiddenNeuron();
     _connection = new IncomingConnection(_neuron);
 }
Exemplo n.º 4
0
 public void Initialize()
 {
     _inputNeuron  = new InputNeuron();
     _hiddenNeuron = new HiddenNeuron();
     _outputNeuron = new OutputNeuron();
 }