我正在将 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);