JavaScript Node js Нейронные сети сохранение в файл

178
04 марта 2019, 19:50

Написал скрипт, используя библиотеку для обучения генетическим алгоритмом 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-а. То есть с самим преобразованием проблем не должно быть.

READ ALSO
Почему при работе с скроллом задают left или top с меняюшимися значениями

Почему при работе с скроллом задают left или top с меняюшимися значениями

Почему при работе с скроллом пишут элементу, который должен скроллиться position:absolute; и меняют ему значения top или left, а не используют к примеру...

161
Проблемы с отображением на Safari?

Проблемы с отображением на Safari?

Есть вот такой сайт click, в хроме всё идеально, но когда загружаешь его с сафари, начинаеться тотальный ужас, фпс 1 в секунду и жестокие лагиВ...

232