ftp.nice.ch/pub/next/developer/objc/ai/NeuralNetwork.N.bs.tar.gz#/Neural-Network/bptest.m

This is bptest.m in view mode; [Download] [Up]

/* =======================================================
	Neural Network Classes for the NeXT Computer
	Written by: Ralph Zazula
					University of Arizona - Fall 1991
					zazula@pri.com (NeXT Mail)
==========================================================*/
//
// This feed-forward, back-prop network is setup to learn
// the identity function (output=input).  The number N is the
// number of inputs (outputs) and H is the number of hidden
// nodes.  The case (H < N) is most interesting - this is a form
// of data compression.
// The number P determines the number of random patterns to learn.
//

#import "BackPropEngine.h"
#import <stdio.h>
#define N 4
#define H 8
#define P 10

void main()
{
	//
	// create a Back-Prop network
	//
   id    bp = [[BackPropEngine alloc]  initWithInputs:N
                                       hidden:H
                                       outputs:N];

   id		random = [[Random alloc] init];	// allocate a Random instance

	
   double inputs[P][N];
   double target[P][N];
   
   int   i,j;
   
   [bp setEta:0.9];				// set the learning-rate

   
	//
	// create the random patterns
	//
	for(j=0; j<P; j++)
		for(i=0; i<N; i++)
			inputs[j][i] = target[j][i] = [random percent]*0.8;
			
	//
	// start the learning loop
	//
   for(j=0; j<100000; j++) {
		for(i=0; i<20; i++) {
   		[bp applyInput:inputs[j%P]];
      	[bp correctWithTarget:target[j%P]];
		}
      if(!(j % P))									// BPE doesn't average the errors
         printf("%u %e\n",j,[bp getError]);  // should do that here...
   }
   

	//
	// dump the weights
	//
   for(j=0; j<[[bp inputs] count]; j++) {
      for(i=0; i<[[bp hidden] count]; i++)
         printf("%10e  ",[[[bp hidden] objectAt:i]
            getWeightFor:[[bp inputs] objectAt:j]]);
      printf("\n");
   }
	printf("-----\n");
   for(j=0; j<[[bp hidden] count]; j++) {
      for(i=0; i<[[bp outputs] count]; i++)
         printf("%10e  ",[[[bp outputs] objectAt:i]
            getWeightFor:[[bp hidden] objectAt:j]]);
      printf("\n");
   }
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.