1. Telegram чат для обсуждения работы JS парсеров и Node.js модулей: https://t.me/a_parser_javascript
  2. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

node.js не работает загрузка обученной сети библиотека brain.js

Тема в разделе "Техническая поддержка по JavaScript парсерам", создана пользователем ВПР, 12 дек 2018.

  1. ВПР

    ВПР A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 янв 2018
    Сообщения:
    5
    Симпатии:
    0
    Если обучить за менее чем 5 секунд сетку и попробовать что-то вычислить то работает.
    Но если сетку сохранить в JSON или в функцию то обратно загрузить не удастся.

    При загрузке из JSON
    Ошибка:
    Код:
    TypeError: Cannot read property 'bias' of undefined
        at NeuralNetwork.fromJSON (files/node_modules/brain.js/./dist/neural-network.js:1136:45)

    При загрузке из функции подсчет идет и результат выдает, но вместо цифр выдает null

    Воспроизводится как на сложных сетках так и на простом примере из репозитория.
    Немного его изменил чтобы он пытался записать json в файл и считать

    Запись в JSON идет корректная. Если запустить такой же пример с тем же файлом на на обычной node.js 8+ версии то все загружается корректно.

    Обучать сетки в парсере конечно не планируется, но вот загрузить обученную очень хотелось бы иметь возможность.

    https://www.npmjs.com/package/brain.js

    Код:
    const fs = require('fs');
    var brain    = require('brain.js');
    
    
    const a = character(
       '.#####.' +
       '#.....#' +
       '#.....#' +
       '#######' +
       '#.....#' +
       '#.....#' +
       '#.....#'
    );
    const b = character(
       '######.' +
       '#.....#' +
       '#.....#' +
       '######.' +
       '#.....#' +
       '#.....#' +
       '######.'
    );
    const c = character(
       '#######' +
       '#......' +
       '#......' +
       '#......' +
       '#......' +
       '#......' +
       '#######'
    );
    
    try {
    
       const net = new brain.NeuralNetwork();
       let basejson = require('base_2.json');
       net.fromJSON(basejson);
       console.log('Загружено из JSON');
    
       let test = {"factor1":1,"factor2":1,"factor3":1,"factor4":1,"factor5":1,"factor6":1};
       console.log(JSON.stringify(net(test)));
       //net.fromJSON(base);
    
       brain.likely(character(
          '.#####.' +
          '#.....#' +
          '#.....#' +
          '###.###' +
          '#.....#' +
          '#.....#' +
          '#.....#'
       ), net);
       console.log(brain.likely(character(
          '.#####.' +
          '#.....#' +
          '#.....#' +
          '###.###' +
          '#.....#' +
          '#.....#' +
          '#.....#'
       ), net));
       // do stuff
    } catch (ex) {
    
       console.log(ex.stack);
    
       /**
        * Learn the letters A through C.
        */
       const net = new brain.NeuralNetwork();
       net.train([
          { input: a, output: { a: 1 } },
          { input: b, output: { b: 1 } },
          { input: c, output: { c: 1 } }
       ], {
          log: detail => console.log(detail)
       });
       fs.writeFile('./files/node_modules/base_2.json',  JSON.stringify(net.toJSON()), function (r,fd) {
          console.log(r,__dirname);
       });
    
       console.log(brain.likely(character(
          '.#####.' +
          '#.....#' +
          '#.....#' +
          '###.###' +
          '#.....#' +
          '#.....#' +
          '#.....#'
       ), net));
    
    }
    
     
  2. Forbidden

    Forbidden Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    9 мар 2013
    Сообщения:
    3.337
    Симпатии:
    1.793
    в примере не хватает как минимум функции character
     
  3. ВПР

    ВПР A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 янв 2018
    Сообщения:
    5
    Симпатии:
    0
    Пообщались в чатике, это пример из библиотеки. Но даже с этой функции воспроизвести не удалось.


    Начал воспроизводить с нуля, на чистом парсере и все завелось.
    Потом попробовал интегрировать с большой обученной сеткой в текущий парсер и получил ту же проблему.
    Значит проблема была в самом парсере.

    Начал копать, проблема обнаружилась в подключаемой библиотеке которая переопределяла прототип у массивов и объектов.
    Отказаться пока не удалось, но прокатило если подключать сетку до того модуля то все заводится.

    Всем спасибо ) пошел обкатывать.
     

Поделиться этой страницей