首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Brain.js NaN培训结果

Brain.js NaN培训结果
EN

Stack Overflow用户
提问于 2019-04-17 17:22:35
回答 2查看 879关注 0票数 2

我正在尝试训练一个网络,它的输入是包含一些预定义的值的特定字符串,稍后我将从数据库或JSON中提取这些值。我通过将每个字符的ACII值除以1000来标准化数据,这样就得到了一个介于输入字符串中每个字符的0到1之间的值数组。错误是,当我开始训练时,我得到了训练错误: NaN,奇怪的是,如果我只有一个输入,它就能工作,下面是代码。

代码语言:javascript
复制
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);

下面的代码可以工作:

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

发布于 2019-05-31 05:47:35

你有没有解决过NaN问题。我在net.biases,net.changes,net.deltas等上也得到了同样的结果。在训练和跑步之后,我总是得到NaN。

我将字符串转换为数字,然后对数组进行缓冲,使它们的长度相同。我见过这样的例子,文本作为对象键值被直接发送到列车中,但是一旦我离开给定的例子并尝试我自己的数据NaN。

有趣的是,在您的第二个示例中,您将标题包含在规范化字符串中,而不仅仅是数据值。这会对事情产生什么影响?

我意识到这是一段时间以前的事情了,从那以后你可能已经离开了,但也许你可以在我发疯之前给我一些启发,把我推向正确的方向:-)

票数 1
EN

Stack Overflow用户

发布于 2020-11-13 10:35:43

我认为这与NeuralNetwork对象只有在所有神经元长度相同时才接受输入有关。我认为我见过的字符串输入示例使用了LSTM(),所以...

我改变了:

代码语言:javascript
复制
const net = new brain.NeuralNetwork()
net.train(/* your input / config here */)

至:

代码语言:javascript
复制
const net = new brain.recurrent.LSTM()
const train = net.train(/* your input / config here */)
console.log(train)

它在每次迭代中都会给我一个训练错误,并记录下来:

代码语言:javascript
复制
{error: 0.011269339231430813, iterations: 150}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55724176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档