Brain.js NaN результат обучения - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь обучить сеть, которая в качестве входных данных принимает определенную строку, содержащую некоторые предопределенные значения, которые позже я извлеку из базы данных или JSON.Я нормализую данные путем деления значения ACII каждого символа на 1000, что оставляет мне массив значений между 0 и 1 каждого символа входной строки.Ошибка в том, что когда я начинаю тренировку, я получаю ошибку обучения: NaN, и странно то, что она работает, если у меня есть только один вход, ниже приведен код.

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

function normalize(string){
  var input = [];
  for(let i=0; i<string.length; i++){
    input.push(string.charCodeAt(i)/1000);
  }
  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 string1 = normalize('Invoice Number IN-7688998788963');
var string2 = normalize('Invoice Date April 19, 2019');
var string3 =  normalize('Due Date May 3, 2019');
var string4 = normalize('Total Due $104.50');
var string5 = normalize('Sub Total $95.00');
var string6 = normalize('Tax $9.50');
const net = new brain.NeuralNetwork();
net.train([
  { input: string1, output: { invoice_num: 1 } },
  { input: string2, output: { date: 1 } },
  { input: string3, output: { due_date: 1 } },
  { input: string4, output: { total_due: 1 } },
  { input: string5, output: { sub_total: 1 } },
  { input: string6, output: { tax: 1 } }
], {
  log: detail => console.log(detail), iterations: 1500
});

let output = net.run(normalize('Invoice Number 1241341'));

console.log(output);

Сильфонный код работает:

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

function normalize(string){
  var input = [];
  for(let i=0; i<string.length; i++){
    input.push(string.charCodeAt(i)/1000);
  }
  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 string1 = normalize('Invoice Number IN-7688998788963');
var string2 = normalize('Invoice Date April 19, 2019');
var string3 =  normalize('Due Date May 3, 2019');
var string4 = normalize('Total Due $104.50');
var string5 = normalize('Sub Total $95.00');
var string6 = normalize('Tax $9.50');
const net = new brain.NeuralNetwork();
net.train([
  { input: string1, output: { invoice_num: 1 } }
], {
  log: detail => console.log(detail), iterations: 1500
});

let output = net.run(normalize('Invoice Number 1241341'));

console.log(output);

1 Ответ

0 голосов
/ 31 мая 2019

вы когда-нибудь решали проблему с NaN.Я получаю то же самое в net.biases, net.changes, net.deltas и т. Д. ... после тренировки, и после запуска я всегда получаю NaN.

Я конвертирую свою строку в числа и затем буферизуюмассивы, чтобы сделать их все одинаковой длины.Я видел примеры, когда текст, как значения ключа объекта, просто отправлялся прямо в поезд, но как только я отошел от приведенного примера и попробовал свои собственные данные, NaN.

Интересно, что вВо втором примере вы включаете заголовок в нормализованную строку, а не просто значение данных.Как это влияет на вещи?

Я понимаю, что это было некоторое время назад, и вы, вероятно, двинулись дальше с тех пор, но, возможно, вы можете пролить немного света и подтолкнуть меня в правильном направлении, прежде чем я сойду с ума:-)

...