All pastes #814331 Raw Edit

Someone

public text v1 · immutable
·published 2007-12-13 05:03 UTC
rendered paste body
public class Perceptron
{
	double[][] data;
	double[] target;
	double[] weights;
	public static void main(String args[])
	{
		Perceptron start = new Perceptron();
		
	}

	public Perceptron()
	{

		data = new double[][] { 
			{1,1,0,1,0,0,0},
			{1,1,0,1,1,0,0},
			{1,1,0,1,0,1,0},
			{1,1,1,0,0,1,1},
			{1,1,1,1,1,0,0},
			{1,1,0,0,0,1,1},
			{1,1,0,0,0,1,0},
			{1,0,1,1,1,0,1},
			{1,0,1,1,0,1,1},
			{1,0,0,0,1,1,0},
			{1,0,1,0,1,0,1},
			{1,0,0,0,1,0,1},
			{1,0,1,1,0,1,1},
			{1,0,1,1,1,0,0}};
		target = new double[] { 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0 };
		weights = new double[7];
		double learningfactor = 0.8;
		double e = 0.00001;
		double sumoferrors = 0;
		int errors = 0;
			for (int j = 0; j < weights.length; j++)
			{
				weights[j] = 0.0;
			}
			weights[0] = 1;
			do {
				sumoferrors = 0;
				for (int i = 0; i < data.length; i++)
				{
				double in = 0;
				
				for (int j = 0; j < data[0].length; j++)
				{
					
					in += weights[j] * data[i][j];
				}
				
				double g = activation(in);
				
				double gprime = activationprime(in);


				
				double err = target[i] - g;
				
				sumoferrors = sumoferrors + (0.5 * Math.pow(err, 2));
				
					for (int k = 0; k < data[0].length; k++)
					{
				
						weights[k] += learningfactor * err * gprime * data[i][k];
						
					}
				
			}
			
		} while (sumoferrors > e); //WE WILL FINISH AS SOON AS THE SUM OF ERRORS BECOME SMALL ENOUGH!
		printMatrix(weights);
		printTest();
		
	}

  public double activation(double input) {
	  return (1.0 / (1.0 + Math.exp(-input)));
	}
	public double activationprime(double input)
	{
		return activation(input) * (1 - activation(input)); 
	}

	public void printMatrix(double[] mat)
	{
		System.out.println("The weights are:");
		for (int i = 0; i < mat.length; i++)
		{
			if (i == 0)
			{
				System.out.printf("Bias: %2.2f\t", mat[i]);
			}
			else
			{
				System.out.printf("%2.2f\t", mat[i]);
			}
			System.out.println();
		}
	}
	public void printTest()
	{
		for (int i = 0; i < target.length; i++)
		{
			System.out.println("Solving for example " + (i + 1) + " with weight and inputs");
			System.out.println("Target: " + target[i]);
			double sum = 0.0;
			for (int j = 0; j < weights.length; j++)
			{
				sum += weights[j] * data[i][j];
			}
			sum = activation(sum);
			System.out.printf("W and xi: %2.2f\n", sum);
		}
	}

}