package org.neuroph.nnet;
import java.util.List;
import org.neuroph.core.Layer;
import org.neuroph.core.NeuralNetwork;
import org.neuroph.core.transfer.Linear;
import org.neuroph.core.transfer.RectifiedLinear;
import org.neuroph.core.transfer.Sigmoid;
import org.neuroph.nnet.comp.neuron.InputNeuron;
import org.neuroph.nnet.learning.BackPropagation;
import org.neuroph.nnet.learning.MomentumBackpropagation;
import org.neuroph.util.ConnectionFactory;
import org.neuroph.util.LayerFactory;
import org.neuroph.util.NeuralNetworkFactory;
import org.neuroph.util.NeuralNetworkType;
import org.neuroph.util.NeuronProperties;
import org.neuroph.util.random.HeZhangRenSunUniformWeightsRandomizer;
public class RectifierNeuralNetwork extends NeuralNetwork {
private static final long serialVersionUID = 1L;
public RectifierNeuralNetwork(List neuronsInLayers) {
this.setNetworkType(NeuralNetworkType.RECTIFIER);
NeuronProperties inputNeuronProperties = new NeuronProperties(InputNeuron.class, Linear.class);
Layer layer = LayerFactory.createLayer(neuronsInLayers.get(0), inputNeuronProperties);
this.addLayer(layer);
// create layers
Layer prevLayer = layer;
for (int layerIdx = 1; layerIdx < neuronsInLayers.size()-1; layerIdx++) {
Integer neuronsNum = neuronsInLayers.get(layerIdx);
layer = LayerFactory.createLayer(neuronsNum, RectifiedLinear.class);
this.addLayer(layer);
ConnectionFactory.fullConnect(prevLayer, layer);
prevLayer = layer;
}
int numberOfOutputNeurons = neuronsInLayers.get(neuronsInLayers.size() - 1);
Layer outputLayer = LayerFactory.createLayer(numberOfOutputNeurons, Sigmoid.class);
this.addLayer(outputLayer);
ConnectionFactory.fullConnect(prevLayer, outputLayer);
NeuralNetworkFactory.setDefaultIO(this); // set input and output cells for network
this.setLearningRule(new MomentumBackpropagation());
this.randomizeWeights(new HeZhangRenSunUniformWeightsRandomizer());
}
}
Ads help maintain this website.