Brain,js 上的训练流?

时间:2021-04-23 17:31:39

标签: javascript brain.js

我正在将 Brain.js 用于 discord 机器人,但我遇到了一个严重的问题。完整的培训使用了我的线程的 100%(因为我使用的是 Javascript),甚至异步执行它也会停止我的所有机器人。我在 Brain.js 文档中读到了名为 TrainingStream (底部的示例) 的内容,但我无法找到解决方案。

完美的解决方案是能够将训练数据添加到原始训练中(因为它会在应用启动时训练大脑)。例如,如果我在内存中有一些数据,就可以向该内存添加更多训练,而无需重新训练所有机器人。

谢谢。

const brain = require('brain.js');

const net = new brain.NeuralNetwork();
const xor = [
  { input: [0, 0], output: [0] },
  { input: [0, 1], output: [1] },
  { input: [1, 0], output: [1] },
  { input: [1, 1], output: [0] },
];

function readInputs(stream, data) {
  for (let i = 0; i < data.length; i++) {
    stream.write(data[i]);
  }
  // let it know we've reached the end of the inputs
  stream.endInputs();
}

const trainingStream = new brain.TrainStream({
  neuralNetwork: net,
  /**
   * Write training data to the stream. Called on each training iteration.
   */
  floodCallback: function () {
    readInputs(trainingStream, xor);
  },

  /**
   * Called when the network is done training.
   */
  doneTrainingCallback: function (obj) {
    console.log(
      `trained in ${obj.iterations} iterations with error: ${obj.error}`
    );

    const result01 = net.run([0, 1]);
    const result00 = net.run([0, 0]);
    const result11 = net.run([1, 1]);
    const result10 = net.run([1, 0]);

    console.log('0 XOR 1: ', result01); // 0.987
    console.log('0 XOR 0: ', result00); // 0.058
    console.log('1 XOR 1: ', result11); // 0.087
    console.log('1 XOR 0: ', result10); // 0.934
  },
});

// kick it off
readInputs(trainingStream, xor);

0 个答案:

没有答案