// three layers: input, hidden, output // as mlp add context layer // jordan connect output of output layer to input of context layer // output of context to input of hidden layer private void createNetwork(int inputNeuronsCount, int hiddenNeuronsCount, int contextNeuronsCount, int outputNeuronsCount) { // create input layer InputLayer inputLayer = new InputLayer(inputNeuronsCount); inputLayer.addNeuron(new BiasNeuron()); addLayer(inputLayer); NeuronProperties neuronProperties = new NeuronProperties(); // neuronProperties.setProperty("useBias", true); neuronProperties.setProperty("transferFunction", TransferFunctionType.Sigmoid.ToString()); // use linear or logitic function! (TR-8604.pdf) Layer hiddenLayer = new Layer(hiddenNeuronsCount, neuronProperties); hiddenLayer.addNeuron(new BiasNeuron()); addLayer(hiddenLayer); ConnectionFactory.fullConnect(inputLayer, hiddenLayer); Layer contextLayer = new Layer(contextNeuronsCount, neuronProperties); addLayer(contextLayer); // we might also need bias for context neurons? Layer outputLayer = new Layer(outputNeuronsCount, neuronProperties); addLayer(outputLayer); ConnectionFactory.fullConnect(hiddenLayer, outputLayer); ConnectionFactory.fullConnect(outputLayer, contextLayer); ConnectionFactory.fullConnect(contextLayer, hiddenLayer); // set input and output cells for network NeuralNetworkFactory.DefaultIO = this; // set learnng rule this.LearningRule = new BackPropagation(); }
/// <summary> /// Creates adaline network architecture with specified number of input neurons /// </summary> /// <param name="inputNeuronsCount"> /// number of neurons in input layer </param> private void createNetwork(int inputNeuronsCount) { // set network type code this.NetworkType = NeuralNetworkType.ADALINE; // create input layer neuron settings for this network NeuronProperties inNeuronProperties = new NeuronProperties(); inNeuronProperties.setProperty("transferFunction", TransferFunctionType.Linear.ToString()); // createLayer input layer with specified number of neurons Layer inputLayer = LayerFactory.createLayer(inputNeuronsCount, inNeuronProperties); inputLayer.addNeuron(new BiasNeuron()); // add bias neuron (always 1, and it will act as bias input for output neuron) this.addLayer(inputLayer); // create output layer neuron settings for this network NeuronProperties outNeuronProperties = new NeuronProperties(); outNeuronProperties.setProperty("transferFunction", TransferFunctionType.Ramp.ToString()); outNeuronProperties.setProperty("transferFunction.slope", 1); outNeuronProperties.setProperty("transferFunction.yHigh", 1); outNeuronProperties.setProperty("transferFunction.xHigh", 1); outNeuronProperties.setProperty("transferFunction.yLow", -1); outNeuronProperties.setProperty("transferFunction.xLow", -1); // createLayer output layer (only one neuron) Layer outputLayer = LayerFactory.createLayer(1, outNeuronProperties); this.addLayer(outputLayer); // createLayer full conectivity between input and output layer ConnectionFactory.fullConnect(inputLayer, outputLayer); // set input and output cells for network NeuralNetworkFactory.DefaultIO = this; // set LMS learning rule for this network this.LearningRule = new LMS(); }