为什么感知器没有按预期训练?

问题描述 投票:0回答:0

我试图学习神经网络,并从感知器开始。 我看了一些教程并完全按照它们进行操作,但它对我不起作用。

var canvas = document.querySelector('canvas')
canvas.width = innerWidth;
canvas.height = innerHeight;
var c = canvas.getContext('2d')



function sign(val) {
  if (val >= 0) {
    return 1
  } else {
    return -1
  }
}

class Perceptron {
  constructor(num) {
    this.weights = []
    this.lr = 0.1

    for (var i = 0; i < num; i++) {
      this.weights.push(Math.random() * 2 - 1)
    }
  }

  guess(inputs) {
    var sum = 0
    for (var i = 0; i < this.weights.length; i++) {
      sum += this.weights[i] * inputs[i]
    }
    var output = sign(sum)
    return output
  }

  train(inputs, target) {
    var guess = this.guess(inputs)
    var error = target - guess

    for (var i = 0; i < this.weights.length; i++) {
      this.weights[i] += error * inputs[i] * this.lr
    }
  }
}

var brain = new Perceptron(2)

var points = []


class Point {
  constructor(x, y) {
    this.x = x
    this.y = y
    this.label = 0

    c.lineWidth = 2

    if (this.y < canvas.height / 2) {
      this.label = 1
    } else if (this.y > canvas.height / 2) {
      this.label = -1
    }
  }
  draw() {
    c.beginPath()
    c.arc(this.x, this.y, 10, 0, Math.PI * 2, false)
    c.fill()
    if (this.label == 1) {
      c.stroke()
    }
  }
  update() {



    this.draw()
  }
}

for (var i = 0; i < 100; i++) {
  points.push(new Point(Math.random() * canvas.width, Math.random() * canvas.height))
}


function animate() {
  requestAnimationFrame(animate)
  c.clearRect(0, 0, canvas.width, canvas.height)
  points.forEach(point => {


    brain.train([point.x, point.y], point.label)
    var guess = brain.guess([point.x, point.y])
    if (guess == point.label) {
      c.fillStyle = "green"
    } else {
      c.fillStyle = "red"
    }
    point.update()
  })
}

animate()
* {
  margin: 0;
  padding: 0;
}

canvas {
  position: absolute;
}
<canvas></canvas>

这是我的代码

谁能告诉我这是怎么回事?

我的目标是让感知器对点进行分类,其中屏幕一半以上的点应具有 1 的值,而屏幕一半以下的点应具有 -1 的值

javascript machine-learning neural-network perceptron
© www.soinside.com 2019 - 2024. All rights reserved.