Package zdenekdrahos.AI.FeedForward

Source Code of zdenekdrahos.AI.FeedForward.FeedForward

/*
* JAVA Neural Networks (https://bitbucket.org/zdenekdrahos/java-neural-networks)
* @license New BSD License
* @author Zdenek Drahos
*/

package zdenekdrahos.AI.FeedForward;

import java.util.List;
import zdenekdrahos.AI.ActivationFunctions.IActivationFunction;
import zdenekdrahos.AI.NeuralNetwork.INeuralNetwork;
import zdenekdrahos.AI.NeuralNetwork.Layers.ILayer;
import zdenekdrahos.AI.NeuralNetwork.Weights.IWeight;

public class FeedForward implements IFeedForward {

    private INetworkValues values;
    private ILayer currentLayer;
    private List<Double> previousLayerValues;
    private List<IWeight> previousLayerWeights;

    @Override
    public INetworkValues buildNetwork(INeuralNetwork network, double[] input) {
        values = new NetworkValues();
        values.init(network, input);
        feedforward(network);
        return values;
    }

    private void feedforward(INeuralNetwork network) {
        for (int layerIndex = 1; layerIndex < network.getLayersCount(); layerIndex++) {
            currentLayer = network.getLayer(layerIndex);
            previousLayerValues = values.getLayerValues(layerIndex - 1);
            for (int neuronIndex = 0; neuronIndex < currentLayer.getNeuronsCount(); neuronIndex++) {
                previousLayerWeights = network.getWeights().getNeuronWeights(layerIndex, neuronIndex);
                values.addNeuronValue(layerIndex, neuronIndex, getNeuronOutput());
            }
        }
    }

    private double getNeuronOutput() {
        double inputSum = getInputSum();
        IActivationFunction activationFunction = currentLayer.getActivationFunction();
        return activationFunction.activate(inputSum);
    }

    private double getInputSum() {
        double sum = 0;
        sum += getBias();
        for (int previousNeuronIndex = 1; previousNeuronIndex < previousLayerWeights.size(); previousNeuronIndex++) {
            sum += getNeuronSignal(previousNeuronIndex);
        }
        return sum;
    }

    private double getBias() {
        return 1 * previousLayerWeights.get(0).getWeight();
    }

    private double getNeuronSignal(int previousNeuronIndex) {
        double neuronValue = previousLayerValues.get(previousNeuronIndex - 1);
        double weight = previousLayerWeights.get(previousNeuronIndex).getWeight();
        return neuronValue * weight;
    }
}
TOP

Related Classes of zdenekdrahos.AI.FeedForward.FeedForward

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.