package org.neuroph.contrib.graphml;

import org.neuroph.core.data.DataSet;
import org.neuroph.core.data.DataSetRow;
import org.neuroph.nnet.MultiLayerPerceptron;
import org.neuroph.util.TransferFunctionType;
/**
 * Approximate XOR gate using a multilayer percepton with 2 inputs, 3 hidden neurons and 1 output. 
 * 
 * The example is adapted from http://neuroph.sourceforge.net/tutorials/MultiLayerPerceptron.html
 * 
 * @author fernando carrillo fernando@carrillo.at 
 *
 */
public class ExampleNetworXOR 
{
	/**
	 * Training data with two input neurons. 
	 * Truth: 
	 * 0,0: 0
	 * 0,1: 1
	 * 1,0: 1 
	 * 1,1: 0 
	 */
	public static DataSet getTrainingData() {
		DataSet data = new DataSet(2, 1);
		
		data.addRow(new DataSetRow(new double[]{0, 0}, new double[]{0}));
		data.addRow(new DataSetRow(new double[]{0, 1}, new double[]{1}));
		data.addRow(new DataSetRow(new double[]{1, 0}, new double[]{1}));
		data.addRow(new DataSetRow(new double[]{1, 1}, new double[]{0}));
		
		return data; 
	}
	
	/**
	 * Returns multilayer percepton learned to approximate the XOR gate. 
	 * @return
	 */
	public static MultiLayerPerceptron getNetwork() {
		
		MultiLayerPerceptron mlPerceptron = new MultiLayerPerceptron(TransferFunctionType.TANH, 2, 3, 1);
		
		
		mlPerceptron.learn( getTrainingData() );
		
		return mlPerceptron; 
	}
}

 

Ads help maintain this website.