Opleiding van 'n Perceptron
- Skep 'n Perceptron-objek
- Skep 'n opleidingsfunksie
- Oefen die perceptron teen die verlangde antwoorde
Opleidingstaak
Stel jou 'n reguit lyn voor in 'n spasie met verspreide xy-punte.
Oefen 'n perceptron om die punte oor en onder die lyn te klassifiseer.
Skep 'n Perceptron-objek
Skep 'n Perceptron-voorwerp. Noem dit enigiets (soos Perceptron).
Laat die perceptron twee parameters aanvaar:
- Die aantal insette (nee)
- Die leertempo (learningRate).
Stel die verstek leertempo na 0,00001.
Skep dan ewekansige gewigte tussen -1 en 1 vir elke inset.
Voorbeeld
// Perceptron Object
function Perceptron(no, learningRate = 0.00001) {
// Set Initial Values
this.learnc = learningRate;
this.bias = 1;
// Compute Random Weights
this.weights = [];
for (let i = 0; i <= no; i++) {
this.weights[i] = Math.random() * 2 - 1;
}
// End Perceptron Object
}
Die ewekansige gewigte
Die Perceptron sal begin met 'n ewekansige gewig vir elke inset.
Die leertempo
Vir elke fout, tydens die opleiding van die Perceptron, sal die gewigte met 'n klein fraksie aangepas word.
Hierdie klein fraksie is die " Perceptron se leertempo ".
In die Perceptron-objek noem ons dit learnc .
Die Vooroordeel
Soms, as beide insette nul is, kan die perseptron 'n in korrekte uitset produseer.
Om dit te vermy, gee ons die perceptron 'n ekstra inset met die waarde van 1.
Dit word 'n vooroordeel genoem .
Voeg 'n Aktiveer-funksie by
Onthou die perceptron-algoritme:
- Vermenigvuldig elke invoer met die perseptron se gewigte
- Som die resultate op
- Bereken die uitkoms
Voorbeeld
this.activate = function(inputs) {
let sum = 0;
for (let i = 0; i < inputs.length; i++) {
sum += inputs[i] * this.weights[i];
}
if (sum > 0) {return 1} else {return 0}
}
Die aktiveringsfunksie sal uitvoer:
- 1 as die som groter as 0 is
- 0 as die som minder as 0 is
Skep 'n opleidingsfunksie
Die opleidingsfunksie raai die uitkoms op grond van die aktiveerfunksie.
Elke keer as die raaiskoot verkeerd is, moet die perseptron die gewigte aanpas.
Na baie raai en aanpassings sal die gewigte korrek wees.
Voorbeeld
this.train = function(inputs, desired) {
inputs.push(this.bias);
let guess = this.activate(inputs);
let error = desired - guess;
if (error != 0) {
for (let i = 0; i < inputs.length; i++) {
this.weights[i] += this.learnc * error * inputs[i];
}
}
}
Terugpropagasie
Na elke raai, bereken die perseptron hoe verkeerd die raaiskoot was.
As die raaiskoot verkeerd is, pas die perseptron die vooroordeel en die gewigte aan sodat die raai die volgende keer 'n bietjie meer korrek sal wees.
Hierdie tipe leer word terugpropagasie genoem .
Nadat jy ('n paar duisend keer) probeer het, sal jou perceptron redelik goed word om te raai.
Skep jou eie biblioteek
Biblioteekkode
// Perceptron Object
function Perceptron(no, learningRate = 0.00001) {
// Set Initial Values
this.learnc = learningRate;
this.bias = 1;
// Compute Random Weights
this.weights = [];
for (let i = 0; i <= no; i++) {
this.weights[i] = Math.random() * 2 - 1;
}
// Activate Function
this.activate = function(inputs) {
let sum = 0;
for (let i = 0; i < inputs.length; i++) {
sum += inputs[i] * this.weights[i];
}
if (sum > 0) {return 1} else {return 0}
}
// Train Function
this.train = function(inputs, desired) {
inputs.push(this.bias);
let guess = this.activate(inputs);
let error = desired - guess;
if (error != 0) {
for (let i = 0; i < inputs.length; i++) {
this.weights[i] += this.learnc * error * inputs[i];
}
}
}
// End Perceptron Object
}
Nou kan jy die biblioteek in HTML insluit:
<script src="myperceptron.js"></script>
Gebruik jou biblioteek
Voorbeeld
// Initiate Values
const numPoints = 500;
const learningRate = 0.00001;
// Create a Plotter
const plotter = new XYPlotter("myCanvas");
plotter.transformXY();
const xMax = plotter.xMax;
const yMax = plotter.yMax;
const xMin = plotter.xMin;
const yMin = plotter.yMin;
// Create Random XY Points
const xPoints = [];
const yPoints = [];
for (let i = 0; i < numPoints; i++) {
xPoints[i] = Math.random() * xMax;
yPoints[i] = Math.random() * yMax;
}
// Line Function
function f(x) {
return x * 1.2 + 50;
}
//Plot the Line
plotter.plotLine(xMin, f(xMin), xMax, f(xMax), "black");
// Compute Desired Answers
const desired = [];
for (let i = 0; i < numPoints; i++) {
desired[i] = 0;
if (yPoints[i] > f(xPoints[i])) {desired[i] = 1}
}
// Create a Perceptron
const ptron = new Perceptron(2, learningRate);
// Train the Perceptron
for (let j = 0; j <= 10000; j++) {
for (let i = 0; i < numPoints; i++) {
ptron.train([xPoints[i], yPoints[i]], desired[i]);
}
}
// Display the Result
for (let i = 0; i < numPoints; i++) {
const x = xPoints[i];
const y = yPoints[i];
let guess = ptron.activate([x, y, ptron.bias]);
let color = "black";
if (guess == 0) color = "blue";
plotter.plotPoint(x, y, color);
}