Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.10.2018, 15:27
Интересующийся
Отправить личное сообщение для grigandal Посмотреть профиль Найти все сообщения от grigandal
 
Регистрация: 18.02.2018
Сообщений: 26

Node js Нейронные сети сохранение в файл
Написал скрипт, используя библиотеку для обучения генетическим алгоритмом genetic.js

(Эта библиотека написана в свою очередь для библиотеки synaptic)

Для нейросети из synaptic поддерживается функция записи в JSON:

Network.toJSON()


И функция построения из JSON-объекта:

synaptic.Network.fromJSON(JSONObject)


С помощью этих функций я пытаюсь сохранить обученную сеть, на случай отключения интернета (обучающие данные берутся из сети), чтобы потом продолжить с того места, на котором оборвалось обучение

Сохранение в файл идет для целой популяции генетического алгоритма. То есть, имеется объект
GA = new GeneticAlgorithm(max_units, winers_count)
, интерфейс генетичекого алгоритма. У него массив из нейросетей - популяция

Сохранение в файл идет таким образом:

var pop = [];
    for (var i = 0; i < GA.Population.length; i++) {
        pop.push(GA.Population[i].toJSON());
    }
    fs.writeFileSync('./population.json', JSON.stringify(pop));
    console.log("saved");

Если же начинаю новое обучение после остановки старого, заполняю популяцию таким образом:

if (fs.existsSync('./population.json')){
    var d = fs.readFileSync('./population.json', 'utf8');
    var pop = JSON.parse(d);
    for (var i = 0; i < pop.length; i++) {
        var unit = synaptic.Network.fromJSON(pop[i]);
        unit.index = i;
        unit.fitness = 0;
        unit.score = 0;
        unit.isWinner = false;
        GA.Population[i] = unit;
        console.log('unit has been read');
    }
}
Score(GA)

Вроде все логично, все сохраняется

Решил протестировать

Генетический алгоритм достаточно прилично натренировывает популяцию, движение к желаемому результату просматривается отменно

Закрываю программу на большом поколении, после того, как сохранил популяцию

Запускаю заново - вроде из файла читается, пишет
unit has been read
, но результат активации нейросети - будто бы не обучалась

Проблема именно с сохранением или чтением

Не с преобразованием и не из-за того, что данные сильно отличаются

Потому что тестировал обучение так же на абсолютно одинаковых данных, которые популяция должна хорошо запомнить уже на 5-7 поколении. Однако - новое обучение, с чтением из сохраненного, - и все равно, будто и не обучалась

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

Что может быть не так?

P.S. Сам генетический алгоритм реализован на комбинировании и мутации уже преобразованных в JSON нейросетей, и в популяцию добавляется нейросеть, преобразованная обратно из JSON-а. То есть с самим преобразованием проблем не должно быть.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключить js файл к js файлу Ozerich Общие вопросы Javascript 8 11.08.2018 21:05
Сохранение контента в файл через JS fdcore Общие вопросы Javascript 10 18.12.2014 15:23
Добавление кода js в js файл BEUJ Общие вопросы Javascript 13 12.01.2012 21:35
Большой JS файл. Кэш IE6. deadpsh Общие вопросы Javascript 1 26.11.2008 23:38
Как защитить файл js от скачивания с сервера? slon Общие вопросы Javascript 2 02.07.2008 01:14