Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

训练感知器

  • 创建感知器对象
  • 创建训练函数
  • 训练感知器以获得正确答案

训练任务

想象一个空间中有一条直线,上面散布着 x y 点。

训练一个感知器来对直线上方和下方的点进行分类。


创建感知器对象

创建一个感知器对象。可以命名为任何名称(例如感知器)。

让感知器接受两个参数

  1. 输入数量 (no)
  2. 学习率 (learningRate)。

将默认学习率设置为 0.00001。

然后为每个输入创建 -1 到 1 之间的随机权重。

示例

// 感知器对象
function Perceptron(no, learningRate = 0.00001) {

// 设置初始值
this.learnc = learningRate;
this.bias = 1;

// 计算随机权重
this.weights = [];
for (let i = 0; i <= no; i++) {
  this.weights[i] = Math.random() * 2 - 1;
}

// 感知器对象结束
}

随机权重

感知器将从每个输入的随机权重开始。

学习率

在训练感知器的过程中,每发生一次错误,权重都会调整一个很小的分数。

这个很小的分数就是“感知器的学习率”。

在感知器对象中,我们称之为learnc

偏差

有时,如果两个输入都为零,感知器可能会产生错误的输出。

为了避免这种情况,我们给感知器一个值为 1 的额外输入。

这被称为偏差



添加激活函数

记住感知器算法

  • 将每个输入与感知器的权重相乘
  • 将结果相加
  • 计算结果

示例

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

激活函数将输出

  • 1 如果 sum 大于 0
  • 0 如果 sum 小于 0

创建训练函数

训练函数根据激活函数猜测结果。

每次猜测错误时,感知器都应该调整权重。

经过多次猜测和调整后,权重将是正确的。

示例

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

自己尝试一下 »


反向传播

每次猜测后,感知器都会计算猜测的错误程度。

如果猜测错误,感知器会调整偏差和权重,以便下次猜测更准确。

这种学习方式被称为反向传播

经过多次尝试(几千次)后,你的感知器将变得很擅长猜测。


创建自己的库

库代码

// 感知器对象
function Perceptron(no, learningRate = 0.00001) {

// 设置初始值
this.learnc = learningRate;
this.bias = 1;

// 计算随机权重
this.weights = [];
for (let i = 0; i <= no; i++) {
  this.weights[i] = Math.random() * 2 - 1;
}

// 激活函数
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}
}

// 训练函数
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];
    }
  }
}

// 感知器对象结束
}

现在你可以将库包含在 HTML 中

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

使用你的库

示例

// 初始化值
const numPoints = 500;
const learningRate = 0.00001;

// 创建一个绘图器
const plotter = new XYPlotter("myCanvas");
plotter.transformXY();
const xMax = plotter.xMax;
const yMax = plotter.yMax;
const xMin = plotter.xMin;
const yMin = plotter.yMin;

// 创建随机 XY 点
const xPoints = [];
const yPoints = [];
for (let i = 0; i < numPoints; i++) {
  xPoints[i] = Math.random() * xMax;
  yPoints[i] = Math.random() * yMax;
}

// 线性函数
function f(x) {
  return x * 1.2 + 50;
}

// 绘制直线
plotter.plotLine(xMin, f(xMin), xMax, f(xMax), "black");

// 计算预期答案
const desired = [];
for (let i = 0; i < numPoints; i++) {
  desired[i] = 0;
  if (yPoints[i] > f(xPoints[i])) {desired[i] = 1}
}

// 创建一个感知器
const ptron = new Perceptron(2, learningRate);

// 训练感知器
for (let j = 0; j <= 10000; j++) {
  for (let i = 0; i < numPoints; i++) {
    ptron.train([xPoints[i], yPoints[i]], desired[i]);
  }
}

// 显示结果
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);
}

自己尝试一下 »


×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.