Скрипт командной строки для обучения модели

Для работы с Synaptic необходимо подключить библиотеку в проект. Если используется Node.js, установка выполняется через npm:

npm install synaptic

Подключение в скрипте:

const synaptic = require('synaptic');
const { Layer, Network, Trainer } = synaptic;

В браузере библиотека может быть подключена через тег <script>:

<script src="https://cdn.jsdelivr.net/npm/synaptic@1.1.4/dist/synaptic.js"></script>

После подключения доступны основные классы для построения нейронных сетей.


Создание нейронной сети

Synaptic предоставляет гибкие возможности для создания сетей. Основные классы:

  • Layer — слой нейронов. Позволяет создавать входные, скрытые и выходные слои.
  • Network — полная сеть, состоящая из нескольких слоев.
  • Trainer — объект для обучения сети.

Пример создания простой сети:

// Создание слоев
const inputLayer = new Layer(2);
const hiddenLayer = new Layer(3);
const outputLayer = new Layer(1);

// Связывание слоев
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);

// Создание сети
const myNetwork = new Network({
  input: inputLayer,
  hidden: [hiddenLayer],
  output: outputLayer
});

Ключевой момент: Layer.project создает соединения между слоями. Каждый нейрон исходного слоя соединяется со всеми нейронами целевого слоя.


Настройка тренировки

Trainer используется для обучения сети с использованием различных методов. Основной метод — train, который принимает массив обучающих примеров и параметры обучения:

const trainer = new Trainer(myNetwork);

trainer.train([
  { input: [0, 0], output: [0] },
  { input: [0, 1], output: [1] },
  { input: [1, 0], output: [1] },
  { input: [1, 1], output: [0] }
], {
  rate: 0.3,
  iterations: 20000,
  error: 0.005,
  shuffle: true,
  log: 1000
});

Ключевые параметры:

  • rate — скорость обучения. Определяет величину корректировки весов.
  • iterations — максимальное количество итераций.
  • error — целевой уровень ошибки.
  • shuffle — случайный порядок данных на каждой итерации.
  • log — интервал вывода информации о процессе обучения.

Сохранение и загрузка сети

Для сохранения состояния сети используется метод toJSON:

const networkJSON = myNetwork.toJSON();
const fs = require('fs');
fs.writeFileSync('network.json', JSON.stringify(networkJSON));

Загрузка сети выполняется через Network.fromJSON:

const savedNetworkJSON = JSON.parse(fs.readFileSync('network.json'));
const loadedNetwork = Network.fromJSON(savedNetworkJSON);

Это позволяет сохранять обученные модели и использовать их повторно.


Обработка входных и выходных данных

После обучения сеть можно использовать для предсказаний:

const output = myNetwork.activate([1, 0]);
console.log(output); // [0.987] — пример вероятностного выхода

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

const binaryOutput = output.map(value => value > 0.5 ? 1 : 0);

Создание скрипта командной строки

Для автоматизации обучения можно создать скрипт CLI. Основная структура:

#!/usr/bin/env node

const fs = require('fs');
const { Layer, Network, Trainer } = require('synaptic');

function trainXOR() {
  const inputLayer = new Layer(2);
  const hiddenLayer = new Layer(3);
  const outputLayer = new Layer(1);

  inputLayer.project(hiddenLayer);
  hiddenLayer.project(outputLayer);

  const network = new Network({
    input: inputLayer,
    hidden: [hiddenLayer],
    output: outputLayer
  });

  const trainer = new Trainer(network);
  trainer.train([
    { input: [0, 0], output: [0] },
    { input: [0, 1], output: [1] },
    { input: [1, 0], output: [1] },
    { input: [1, 1], output: [0] }
  ], {
    rate: 0.3,
    iterations: 20000,
    error: 0.005,
    shuffle: true,
    log: 1000
  });

  fs.writeFileSync('xor_network.json', JSON.stringify(network.toJSON()));
  console.log('Модель обучена и сохранена.');
}

trainXOR();

Особенности скрипта CLI:

  • Первая строка #!/usr/bin/env node позволяет запускать скрипт напрямую.
  • Функция trainXOR инкапсулирует создание и обучение сети.
  • Используется модуль fs для сохранения модели.
  • Логирование процесса обучения облегчает отслеживание прогресса.

Расширение функционала

  • Добавление аргументов командной строки для выбора метода обучения или параметров (process.argv).
  • Использование других алгоритмов обучения, встроенных в Synaptic (Trainer поддерживает trainAsync, trainPattern).
  • Возможность динамического построения сети по конфигурационным файлам JSON, что упрощает масштабирование моделей.

Скрипт командной строки становится инструментом для быстрого прототипирования и тестирования нейросетевых моделей без необходимости постоянного редактирования исходного кода.