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-а. То есть с самим преобразованием проблем не должно быть. |
Часовой пояс GMT +3, время: 18:01. |