This code is mainly based on Processing, a flexible software sketchbook for visualizing things and arts.
First, we derive a class named Perceptron with two useful method guess
and train
.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38int sign(float n) {
if (n >= 0) {
return 1;
} else {
return -1;
}
}
class Perceptron {
float[] weights = new float[2];
float lr = 0.2;
// constructor
Perceptron() {
// initialize the weight randomly
for (int i = 0; i < weights.length; i++) {
weights[i] = random(-1, 1);
}
}
int guess(float[] inputs) {
float sum = 0;
for (int i = 0; i < weights.length; i++) {
sum += inputs[i] * weights[i];
}
int output = sign(sum);
return output;
}
void train(float[] inputs, int target) {
int guess = guess(inputs);
int error = target - guess;
for (int i = 0; i < weights.length; i++) {
weights[i] += error * inputs[i] * lr;
}
}
}
To specify the training procession using a simple perceptron, we activate a sketchbook named Training.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26class Point {
float x;
float y;
int label;
Point() {
x = random(width);
y = random(height);
if (x > y) {
label = 1;
} else {
label = -1;
}
}
void show() {
stroke(0);
if (label == 1) {
fill(255);
} else {
fill(0);
}
ellipse(x, y, 32, 32);
}
}
Now, come to our basic purpose. Draw random samples and make trainings. Here is the main sketchbook file SimplePerceptron
.
1 | Perceptron brain; |
Simply click the run button, Processing will help start an interative interface (similar to the canvas) and render the result below.