Brain JS字符串分类缓慢

时间:2019-05-29 03:45:19

标签: javascript machine-learning brain.js

我正在使用Brain js进行文本分类。我面临的问题是训练的速度非常慢。以下代码需要15到20分钟才能执行。我读过几本simple projects,它们似乎都面临着同样的问题。一些作者做的事情很有趣-他们将文本转换为数字。我的问题是如何将字符串转换为数字以提高学习速度,然后呈现与我现在相同的输出?

//Simple emotion detetction
    var net = new brain.recurrent.LSTM();
    net.train([
      {input: "Feeling good.", output: "positive"},
      {input: "Overall well.", output: "positive"},
      {input: "Extremely happy.", output: "positive"},
      {input: "I'm feeling joyful.", output: "positve"},
      {input: "She is in an outstanding mood.", output: "positive"},
      {input: "He is feeling inspiration", output: "positive."},  
       {input: "Today will be my day.", output: "positive"},
      {input: "I know that I’m winner.", output: "positive"},
      {input: "Yes ,I can do it, I know I can.", output: "positive"},
      {input: "Tomorrow is next chance.", output: "positve"},
      {input: "Henna can do it.", output: "positive"},
      {input: "I like vegetables.", output: "positive."},
      {input: "I'm feeling worse than ever.", output: "negative"},
      {input: "She seems a little distracted.", output: "negative"},
      {input: "This behaviour is unacceptable.", output: "negative"},
      {input: "Rober is feeling depressed.", output: "negative"},
      {input: "They are feeling miserable.", output: "negative"},
      {input: "Robert is in bad mood.", output: "negative"},
      {input: "I'm feeling pity for m action.", output: "negative"}
    ]);
    alert(net.run("I'm feeling pretty bad."));

1 个答案:

答案 0 :(得分:0)

我知道为时已晚。但是希望这对正在寻找类似问题的解决方案的人有所帮助。

@Da Mahdi03提到的评论绝对是减少培训时间的方法。在训练过程中,将字符串转换为数字可以大大提高性能。

但是,如果尝试在Web浏览器中立即训练和使用网络,那仍然不能解决您的问题(假设因为您在代码中使用了alert())。而且,根据数据大小,brain.js将花费更多时间进行训练。

解决方案是先训练网络,然后将其离线保存到JSON,然后通过ajax调用或以JSONP请求的形式加载JSON,并使用训练后的数据启动NeuralNet。

例如添加一个node.js测试用例

培训:

const net = new brain.recurrent.LSTM();
console.log(start = new Date().getTime())
net.train([
  {input: "Feeling good.", output: "positive"},
  {input: "Overall well.", output: "positive"},
  {input: "Extremely happy.", output: "positive"},
  {input: "I'm feeling joyful.", output: "positive"},
  {input: "She is in an outstanding mood.", output: "positive"},
  {input: "He is feeling inspiration", output: "positive"},  
  {input: "Today will be my day.", output: "positive"},
  {input: "I know that I’m winner.", output: "positive"},
  {input: "Yes ,I can do it, I know I can.", output: "positive"},
  {input: "Tomorrow is next chance.", output: "positive"},
  {input: "Henna can do it.", output: "positive"},
  {input: "I like vegetables.", output: "positive"},
  {input: "I'm feeling worse than ever.", output: "negative"},
  {input: "She seems a little distracted.", output: "negative"},
  {input: "This behaviour is unacceptable.", output: "negative"},
  {input: "Rober is feeling depressed.", output: "negative"},
  {input: "They are feeling miserable.", output: "negative"},
  {input: "Robert is in bad mood.", output: "negative"},
  {input: "I'm feeling pity for m action.", output: "negative"}
]);
const json = net.toJSON()
const data = JSON.stringify(json);
fs.writeFileSync('trainingdata.json', data)
console.log(end = new Date().getTime(), (end - start) / 1000); // outputs 800 seconds

应用程序使用情况:

const brain = require('brain.js')
const fs = require('fs');    
let rawdata = fs.readFileSync('trainingdata.json');
let data = JSON.parse(rawdata);

console.log(start = new Date().getTime())
var net = new brain.recurrent.LSTM();
net.fromJSON(data)
console.log("output = "+net.run("Feeling good."));
console.log(end = new Date().getTime(), (end - start)/1000) // Outputs 0.01 seconds