Библиотека Synaptic является чистой JavaScript-реализацией нейронных сетей, что позволяет использовать её как в браузере, так и на сервере через Node.js. Для эффективной работы с современными инструментами сборки, такими как Webpack и Browserify, необходимо корректно настроить проект.
Установка через npm:
npm install synaptic
В Node.js модуль подключается стандартным способом:
const synaptic = require('synaptic');
Для использования в браузере через сборщик необходимо подготовить пакет и настроить точку входа.
Browserify позволяет использовать модули CommonJS в браузере. Основные шаги включают:
app.js:const synaptic = require('synaptic');
const { Layer, Network, Trainer } = synaptic;
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
});
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] }
]);
console.log(myNetwork.activate([1, 0]));
browserify app.js -o bundle.js
В результате создается единый файл bundle.js, который
можно подключить в HTML:
<script src="bundle.js"></script>
Webpack предоставляет более гибкую систему сборки, поддерживающую
модули ES и CommonJS. Для работы с Synaptic необходимо создать
минимальный конфигурационный файл webpack.config.js:
const path = require('path');
module.exports = {
entry: './src/app.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
mode: 'development',
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
};
После установки зависимостей:
npm install --save-dev webpack webpack-cli babel-loader @babel/core @babel/preset-env
Запуск сборки:
npx webpack
Размер бандла: Synaptic занимает относительно небольшое место, но при больших проектах с множеством зависимостей рекомендуется использовать Tree Shaking для исключения неиспользуемых модулей.
ES-модули vs CommonJS: Synaptic распространяется как CommonJS-модуль, но Webpack позволяет импортировать его через синтаксис ES:
import synaptic from 'synaptic';
const { Layer, Network, Trainer } = synaptic;
npm install --save-dev @types/synaptic
webpack-dev-server с HMR, чтобы изменения в сети или
обучающих данных сразу отражались в браузере.Рекомендуется использовать структуру:
project/
├─ src/
│ ├─ app.js
│ └─ neural/
│ └─ network.js
├─ dist/
│ └─ bundle.js
├─ package.json
└─ webpack.config.js
В network.js можно инкапсулировать конфигурацию
сети:
import { Layer, Network } from 'synaptic';
export function createXORNetwork() {
const inputLayer = new Layer(2);
const hiddenLayer = new Layer(3);
const outputLayer = new Layer(1);
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
return new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
}
Для продакшн-сборки полезно включить минификацию и оптимизацию:
const { merge } = require('webpack-merge');
const common = require('./webpack.common.js');
const TerserPlugin = require('terser-webpack-plugin');
module.exports = merge(common, {
mode: 'production',
optimization: {
minimize: true,
minimizer: [new TerserPlugin()]
}
});
Это снижает размер bundle.js и ускоряет загрузку
страницы.
Сборка Synaptic через Browserify или Webpack обеспечивает удобное использование библиотеки в браузерных приложениях. Browserify подходит для простых проектов, где требуется быстрое объединение скриптов. Webpack обеспечивает гибкость, оптимизацию, поддержку модулей ES и интеграцию с современными инструментами разработки, что особенно важно при масштабных приложениях с нейронными сетями и сложной логикой обучения.