javascript - JavaScript 中的神经网络

标签 javascript neural-network brain.js

我的神经网络遇到了一些问题。我已经将其设置为生成一个包含 5 个值的数组; 01,即 [1,1,0,1,0]。我使用 Node.js 控制台记录随机数组,如果我用 y 回复,它会将其添加到具有正确输出的训练中,反之亦然。一旦我做出回应,genRan() 就会运行并创建一个新的随机数组,并将“猜测”保存到var Guess。然而,第一次运行后,它不再给我一个猜测值,而是:[object Object]

这是代码:

var brain = require('brain.js');
var net = new brain.NeuralNetwork();
const readline = require('readline');

const r1 = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

var ca = 0,
    wa = 0;

net.train([
    {input: [0,0,0,0,0], output: [0]}
]);

function genRan(){
    var a,b,c,d,e;
    var array = [];
    a = Math.round(Math.random());
    b = Math.round(Math.random());
    c = Math.round(Math.random());
    d = Math.round(Math.random());
    e = Math.round(Math.random());

    array.push(a,b,c,d,e);
    var guess = net.run(array);
    ask(array,guess);
}

function ask(a,b){
    var array = a,
        guess = b;
    r1.question((wa+ca) + ") input: " + array + " We think: " + guess + ". Am I correct? (Y/N)", (answer) => {

        if(answer == "Y" || answer == "y"){
            ca++;
            net.train([
                {input : array, output : Math.round(guess)}
            ]);
        }else if(answer == "N" || answer == "n"){
            wa++;
            var roundGuess = Math.round(guess);
            var opposite;
            switch (roundGuess){
                case 1:
                    opposite = 0;
                    break;
                case 0:
                    opposite = 1;
                    break;
                default:
                    opposite = null
            }
            net.train([
                {input : array, output : opposite}
            ]);     
        }
        console.log("Success percent: " + (100 *ca/(ca+wa)) + "% " + (ca+wa) +" attempts\n\r");
        genRan();
    })

}
genRan();

第一个问题工作正常,并呈现以下内容:

0) input: 0,0,0,0,0 We think: 0.07046. Am I correct? (Y/N)

当我回复时,我得到:

Success percent: 100% 1 attempts

1) input 1,1,1,0,1 We think: [object Object]. Am I correct? (Y/N)

出于某种原因,当它“猜测”时,它不会给我一个值。有什么想法吗?

最佳答案

它出错的原因是双重的

  1. net.run 的输出是一个数组 - 您可能需要其中的第一项。
  2. net.trainoutput 的输入是一个数组 - 您向其传递一个不同的值

经过一些更改,您的代码将按照(我认为)您的预期工作:

  1. ask 方法中始终使用 guess[0]
  2. oposite变量括在方括号中以使其成为数组

     net.train([
            {input : array, output : [opposite]}
        ]);     
    

下面的工作代码供引用(但在 stacksnippet 中不起作用)

var brain = require('brain.js');
var net = new brain.NeuralNetwork();
const readline = require('readline');

const r1 = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

var ca = 0,
    wa = 0;

net.train([
    {input: [0,0,0,0,0], output: [0]}
]);

function genRan(){
    var a,b,c,d,e;
    var array = [];
    a = Math.round(Math.random());
    b = Math.round(Math.random());
    c = Math.round(Math.random());
    d = Math.round(Math.random());
    e = Math.round(Math.random());

    array.push(a,b,c,d,e);
    //console.log(array);
    var guess = net.run(array);
    ask(array,guess);
}

function ask(a,b){
    var array = a,
        guess = b;
    r1.question((wa+ca) + ") input: " + array + " We think: " + guess[0] + ". Am I correct? (Y/N)", (answer) => {

        if(answer == "Y" || answer == "y"){
            ca++;
            net.train([
                {input : array, output : Math.round(guess[0])}
            ]);
        }else if(answer == "N" || answer == "n"){
            wa++;
            var roundGuess = Math.round(guess[0]);
            var opposite;
            switch (roundGuess){
                case 1:
                    opposite = 0;
                    break;
                case 0:
                    opposite = 1;
                    break;
                default:
                    opposite = null
            }
            net.train([
                {input : array, output : [opposite]}
            ]);     
        }
        console.log("Success percent: " + (100 *ca/(ca+wa)) + "% " + (ca+wa) +" attempts\n\r");
        genRan();
    })

}
genRan();

关于javascript - JavaScript 中的神经网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49073052/

相关文章:

javascript - 从 promise 图打印结果

python - 使用 Theano 进行神经网络特征提取

javascript - brain.js 神经网络的正确训练

npm - 当我尝试使用 npm 安装 Brain.js 时出现此错误,我写了 npm i -S Brain.js

javascript - 未捕获的无效字符错误 : failed to convert to blob from base64 image

javascript - 从 GPS 坐标显示当前速度

javascript - 如何从异步调用返回响应?

python - 如何在keras中记录每批处理的val_loss和loss

machine-learning - 如何在Caffe中循环Blob变量的所有元素?

javascript - 预训练大脑 js 模型