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:

  1. Die aantal insette (nee)
  2. 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);
}