簡體   English   中英

JavaScript中的神經網絡

[英]Neural Network in JavaScript

我的神經網絡有點麻煩。 我已經設置好了,它會生成一個包含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.train output的輸入是一個數組-您正在為其傳遞一個不同的值

經過一些更改,您的代碼將按您期望的那樣工作:

  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(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM