Iseng-iseng saya coba membuat program sederhana memvisualisasikan output space multilayer perceptron.

Source code nya adalah sbb.
1) File param.dat
-5 5 weight dari hidden neuron ke-1 dengan input neuron ke-1 dan ke-2
-5 5 weight dari hidden neuron ke-2 dengan input neuron ke-1 dan ke-2
-5 5 weight dari output neuron ke-1 dengan hidden neuron ke-1 dan ke-2
-2.5 2.5 bias dari hidden neuron ke-1 dan ke-2
-2.5 bias dari output neuron
2) File neuro.c
// Simulasi visualisasi output space dari multilayer perceptron dengan struktur 2-2-1
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float weight_h1i1,weight_h1i2,weight_h2i1,weight_h2i2,weight_oh1,weight_oh2;
float bias_h1,bias_h2,bias_o;
FILE *myfopen( char *filename, char *mode)
{
FILE *fp;
if((fp=fopen(filename,mode))==NULL)
{
fprintf(stderr,"Cannot open file %s.\n",filename);
exit(1);
}
return(fp);
}
void myfgets(void *ptr, int size, FILE *stream)
{
if(fgets(ptr,size,stream)==NULL)
{
fprintf(stderr,"Read error.\n");
exit(1);
}
}
float sigmoid(float net)
{
return 1.0/(1+exp(-net));
}
void read_param(char *filename)
{
FILE *fpi;
char line[100];
fpi=myfopen(filename,"r");
myfgets(line,100,fpi);
sscanf(line,"%f %f",&weight_h1i1,&weight_h1i2);
myfgets(line,100,fpi);
sscanf(line,"%f %f",&weight_h2i1,&weight_h2i2);
myfgets(line,100,fpi);
sscanf(line,"%f %f",&weight_oh1,&weight_oh2);
myfgets(line,100,fpi);
sscanf(line,"%f %f",&bias_h1,&bias_h2);
myfgets(line,100,fpi);
sscanf(line,"%f",&bias_o);
fclose(fpi);
}
main()
{
FILE *fp;
int i,j;
unsigned char pixel,green=0;
float sum,x1,x2,h1,h2,o;
read_param("param.dat");
fp=myfopen("out.ppm","w");
fprintf(fp,"P6\n200 200\n255\n");
for(j=0;j<200;j++)
for(i=0;i<200;i++) {
x1=(float)(j-100)/20;
x2=(float)(i-100)/20;
sum=x1*weight_h1i1 + x2*weight_h1i2 - bias_h1;
h1=sigmoid(sum);
sum=x1*weight_h2i1 + x2*weight_h2i2 - bias_h2;
h2=sigmoid(sum);
sum=h1*weight_oh1+h2*weight_oh2-bias_o;
pixel=(unsigned char)(255*sigmoid(sum));
fwrite(&pixel,sizeof(unsigned char),1,fp);
fwrite(&green,sizeof(unsigned char),1,fp);
pixel=255-pixel;
fwrite(&pixel,sizeof(unsigned char),1,fp);
}
fclose(fp);
}
Cara menjalankannya adalah sbb.
- tempatkan param.dat dan neuro.c pada folder/direktori yang sama
- compile dengan cara gcc neuro.c -o neuro -lm
- eksekusi dengan cara ./neuro
- program akan membaca nilai weight dan bias dari file param.dat, menghitung nilai output dan memvisualisasikan nilai outputnya dalam warna biru s/d merah.output.ppm adalah hasil visualisasi dimana merah merepresentasikan nilai output mendekati 1 dan warna biru merepresentasikan nilai output mendekati 0
Contoh hasil eksekusi untuk XOR problem adalah
