O‘qitish
- Perseptron obyektini yaratish
- O‘qitish funksiyasini yaratish
- Perseptronni to‘g‘ri javoblar asosida o‘qitish
O‘qitish vazifasi
x y nuqtalari sochilgan fazodagi to‘g‘ri chiziqni tasavvur qiling.
Chiziqdan yuqoridagi va pastdagi nuqtalarni klassifikatsiya qilish uchun perseptronni o‘qiting.
Perseptron obyektini yaratish
Perseptron obyektini yarating. Unga istalgan nom bering (masalan, Perceptron).
Perseptron ikkita parametr qabul qilsin:
- Kirishlar soni (no)
- O‘rganish tezligi (learningRate).
Standart o‘rganish tezligini 0.00001 qilib belgilang.
So‘ngra har bir kirish uchun -1 va 1 oralig‘ida tasodifiy vaznlar yarating.
Misol
// 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
}
Tasodifiy vaznlar
Perseptron ishni har bir kirish uchun tasodifiy vazn bilan boshlaydi.
O‘rganish tezligi
Perseptronni o‘qitish jarayonida har bir xato uchun vaznlar kichik bir ulushga tuzatiladi.
Ana shu kichik ulush "perseptronning o‘rganish tezligi" deb ataladi.
Perceptron obyektida biz uni learnc deb ataymiz.
Siljish (bias)
Ba’zan ikkala kirish ham nolga teng bo‘lsa, perseptron noto‘g‘ri natija chiqarishi mumkin.
Buning oldini olish uchun perseptronga qiymati 1 ga teng bo‘lgan qo‘shimcha kirish beramiz.
Bu siljish (bias) deb ataladi.
Aktivatsiya funksiyasini qo‘shish
Perseptron algoritmini eslang:
- Har bir kirishni perseptron vaznlariga ko‘paytiring
- Natijalarni qo‘shing
- Yakuniy natijani hisoblang
Misol
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}
}
Aktivatsiya funksiyasi quyidagini chiqaradi:
- Agar yig‘indi 0 dan katta bo‘lsa, 1
- Agar yig‘indi 0 dan kichik bo‘lsa, 0
O‘qitish funksiyasini yaratish
O‘qitish funksiyasi aktivatsiya funksiyasi asosida natijani taxmin qiladi.
Har safar taxmin noto‘g‘ri chiqqanda perseptron vaznlarni tuzatishi kerak.
Ko‘plab taxmin va tuzatishlardan so‘ng vaznlar to‘g‘ri bo‘ladi.
Misol
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];
}
}
}
Xatoni teskari tarqatish (backpropagation)
Har bir taxmindan so‘ng perseptron taxmin qanchalik noto‘g‘ri bo‘lganini hisoblaydi.
Agar taxmin noto‘g‘ri bo‘lsa, perseptron keyingi safar taxmin biroz to‘g‘riroq chiqishi uchun siljish va vaznlarni tuzatadi.
Bunday o‘rganish xatoni teskari tarqatish (backpropagation) deb ataladi.
(Bir necha ming marta) urinishdan so‘ng perseptroningiz ancha yaxshi taxmin qiladigan bo‘ladi.
O‘z kutubxonangizni yarating
Kutubxona kodi
// 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
}
Endi kutubxonani HTML’ga ulashingiz mumkin:
<script src="myperceptron.js"></script>
Kutubxonangizdan foydalaning
Misol
// 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);
}
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
