Melatih Perceptron
- Buat Objek Perceptron
- Buat Fungsi Pelatihan
- Latih perceptron terhadap jawaban yang diinginkan
Tugas Pelatihan
Bayangkan sebuah garis lurus dalam ruang dengan titik-titik xy yang tersebar.
Latih seorang perceptron untuk mengklasifikasikan titik-titik di atas dan di bawah garis.
Buat Objek Perceptron
Buat objek Perceptron. Beri nama apa saja (seperti Perceptron).
Biarkan perceptron menerima dua parameter:
- Jumlah input (tidak)
- Tingkat pembelajaran (learningRate).
Atur tingkat pembelajaran default ke 0,00001.
Kemudian buat bobot acak antara -1 dan 1 untuk setiap input.
Contoh
// 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
}
Bobot Acak
Perceptron akan mulai dengan bobot acak untuk setiap input.
Tingkat Pembelajaran
Untuk setiap kesalahan, saat melatih Perceptron, bobot akan disesuaikan dengan pecahan kecil.
Pecahan kecil ini adalah " kecepatan belajar Perceptron ".
Dalam objek Perceptron kami menyebutnya learnc .
Bias
Kadang-kadang, jika kedua input adalah nol, perceptron mungkin menghasilkan output yang benar.
Untuk menghindari hal ini, kami memberikan perceptron input tambahan dengan nilai 1.
Ini disebut bias .
Tambahkan Fungsi Aktifkan
Ingat algoritma perceptron:
- Kalikan setiap input dengan bobot perceptron
- Jumlahkan hasilnya
- Hitung hasilnya
Contoh
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}
}
Fungsi aktivasi akan menampilkan:
- 1 jika jumlahnya lebih besar dari 0
- 0 jika jumlahnya kurang dari 0
Buat Fungsi Pelatihan
Fungsi pelatihan menebak hasil berdasarkan fungsi aktivasi.
Setiap kali tebakan salah, perceptron harus menyesuaikan bobot.
Setelah banyak tebakan dan penyesuaian, bobotnya akan benar.
Contoh
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];
}
}
}
propagasi balik
Setelah setiap tebakan, perceptron menghitung seberapa salah tebakannya.
Jika tebakan salah, perceptron menyesuaikan bias dan bobot sehingga tebakan akan sedikit lebih benar di waktu berikutnya.
Jenis pembelajaran ini disebut backpropagation .
Setelah mencoba (beberapa ribu kali) perceptron Anda akan menjadi cukup baik dalam menebak.
Buat Perpustakaan Anda Sendiri
Kode Perpustakaan
// 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
}
Sekarang Anda dapat menyertakan perpustakaan dalam HTML:
<script src="myperceptron.js"></script>
Gunakan Perpustakaan Anda
Contoh
// 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);
}