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, время: 01:36. |