Bir Perceptron Eğitimi

  • Bir Perceptron Nesnesi Oluşturun
  • Bir Eğitim İşlevi Oluşturun
  • Algılayıcıyı istenen cevaplara karşı eğitin

Eğitim Görevi

Dağınık xy noktaları olan bir uzayda düz bir çizgi hayal edin.

Çizginin üstündeki ve altındaki noktaları sınıflandırmak için bir algılayıcı eğitin.


Bir Perceptron Nesnesi Oluşturun

Bir Perceptron nesnesi oluşturun. Herhangi bir isim verin (Perceptron gibi).

Algılayıcının iki parametreyi kabul etmesine izin verin:

  1. Giriş sayısı (hayır)
  2. Öğrenme oranı (learningRate).

Varsayılan öğrenme oranını 0.00001 olarak ayarlayın.

Ardından, her giriş için -1 ile 1 arasında rastgele ağırlıklar oluşturun.

Örnek

// 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
}

Rastgele Ağırlıklar

Perceptron, her giriş için rastgele bir ağırlıkla başlayacaktır .

Öğrenme Oranı

Her hata için, Perceptron'u eğitirken, ağırlıklar küçük bir kesir ile ayarlanacaktır.

Bu küçük kesir " Perceptron'un öğrenme oranı "dır.

Perceptron nesnesinde biz onu öğrenici olarak adlandırırız .

Önyargı

Bazen, her iki girdi de sıfırsa, algılayıcı doğru çıktı üretebilir.

Bunu önlemek için algılayıcıya 1 değerinde fazladan bir girdi veriyoruz.

Buna önyargı denir .


Etkinleştirme İşlevi Ekle

Perceptron algoritmasını hatırlayın:

  • Her girdiyi algılayıcının ağırlıklarıyla çarpın
  • sonuçları topla
  • sonucu hesapla

Örnek

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}
}

Aktivasyon fonksiyonu çıktı verecektir:

  • 1 eğer toplam 0'dan büyükse
  • Toplam 0'dan küçükse 0

Bir Eğitim İşlevi Oluşturun

Eğitim işlevi, etkinleştirme işlevine dayalı olarak sonucu tahmin eder.

Tahmin her yanlış olduğunda, algılayıcı ağırlıkları ayarlamalıdır.

Birçok tahmin ve ayarlamadan sonra ağırlıklar doğru olacaktır.

Örnek

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];
    }
  }
}


Geri yayılım

Her tahminden sonra algılayıcı tahminin ne kadar yanlış olduğunu hesaplar.

Tahmin yanlışsa, algılayıcı yanlılığı ve ağırlıkları ayarlar, böylece bir dahaki sefere tahmin biraz daha doğru olur.

Bu tür öğrenmeye geri yayılım denir .

Denedikten sonra (birkaç bin kez) algılayıcınız tahmin etmede oldukça iyi hale gelecektir.


Kendi Kitaplığınızı Oluşturun

Kütüphane Kodu

// 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
}

Artık kütüphaneyi HTML'ye dahil edebilirsiniz:

<script src="myperceptron.js"></script>

Kitaplığınızı Kullanın

Örnek

// 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);
}