Brain.js Ошибка обучения NaN, данные нормализованы - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь обучить нейронную сеть с некоторыми данными из файла JSON, которые я предварительно загружаю и нормализую, когда я помещаю в массив trainData слишком массивы 200 чисел от 0 до 1, но как только я начинаю тренировать сеть, я получаю ошибкуNaN для каждой итерации.

var brain = require('brain.js');
var fs = require('fs');
const PDFExtract = require('pdf.js-extract').PDFExtract;
const pdfExtract = new PDFExtract();

var MAX = 200;
var structured_data = JSON.parse(fs.readFileSync("./data/test-company/structured_date.json"));

function normalize(string) {
    var input = [];
    for (let i = 0; i < string.length; i++) {
        input.push(string.charCodeAt(i) / 1000);
    }
    for (let i = string.length; i < MAX; i++) {
        input.push(0);
    }
    return input;
}


function convert_ascii(ascii) {
    var string = '';
    for (let i = 0; i < ascii.length; i++) {
        string += String.fromCharCode(ascii[i] * 1000);
    }
    return string;
}

var trainData = [];
for(let i=0;i<structured_data.length;i++){
    trainData.push({
        input:{ value:normalize(structured_data[i].title.value), x:normalize(structured_data[i].title.x.toString()), y : normalize(structured_data[i].title.y.toString())},
        output : {title : 1}
    });
    trainData.push({
        input:{ value:normalize(structured_data[i].invoice_number.value), x:normalize(structured_data[i].invoice_number.x.toString()), y : normalize(structured_data[i].invoice_number.y.toString())},
        output : {invoice_number : 1}
    });
    trainData.push({
        input:{ value:normalize(structured_data[i].invoice_date.value), x:normalize(structured_data[i].invoice_date.x.toString()), y : normalize(structured_data[i].invoice_date.y.toString())},
        output : {invoice_date : 1}
    });
    trainData.push({
        input:{ value:normalize(structured_data[i].invoice_due_date.value), x:normalize(structured_data[i].invoice_due_date.x.toString()), y : normalize(structured_data[i].invoice_due_date.y.toString())},
        output : {invoice_due_date : 1}
    });
    trainData.push({
        input:{ value:normalize(structured_data[i].total_due.value), x:normalize(structured_data[i].total_due.x.toString()), y : normalize(structured_data[i].total_due.y.toString())},
        output : {total_due : 1}
    });
    trainData.push({
        input:{ value:normalize(structured_data[i].sub_total.value), x:normalize(structured_data[i].sub_total.x.toString()), y : normalize(structured_data[i].sub_total.y.toString())},
        output : {sub_total : 1}
    });
    trainData.push({
        input:{ value:normalize(structured_data[i].tax.value), x:normalize(structured_data[i].tax.x.toString()), y : normalize(structured_data[i].tax.y.toString())},
        output : {tax : 1}
    });
}

console.log(trainData);

setTimeout(function(){
    const net = new brain.NeuralNetwork();
net.train(trainData,
    {
    log: detail => console.log(detail),
    iterations: 200
});


fs.writeFileSync('./net.json', JSON.stringify(net.toJSON()));
}, 2000);

А вот структура данных поезда, если я консоль записываю их в журнал, для сокращения я сократил их до 3 из множества входных выходных пар, которые у меня есть.

[ { input: { value: [Array], x: [Array], y: [Array] },
    output: { title: 1 } },
  { input: { value: [Array], x: [Array], y: [Array] },
    output: { title: 1 } },
  { input: { value: [Array], x: [Array], y: [Array] },
    output: { title: 1 } } ]

И каждый из массивов имеет следующую структуру, массив чисел от 0 до 1 и каждый с фиксированной длиной 100:

[ 0.073,
  0.11,
  0.118,
  0.111,
  0.105,
  0.099,
  0.101,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0 ]
...