Для использования библиотеки Brain.js в проектах на TypeScript необходимо учитывать типизацию входных данных и конфигурацию нейросетей. Brain.js предоставляет классы для создания различных видов нейросетей: Feedforward, LSTM, GRU, что требует правильного указания типов для входных и выходных данных.
Установка библиотеки и типовых определений осуществляется командой:
npm install brain.js
npm install --save-dev @types/brain.js
Импорт осуществляется через стандартный синтаксис ES6:
import { NeuralNetwork, ITrainingData } from 'brain.js';
Тип ITrainingData описывает структуру обучающего
примера:
interface ITrainingData {
input: number[] | { [key: string]: number };
output: number[] | { [key: string]: number };
}
Использование типизированных данных обеспечивает строгую проверку и предотвращает ошибки на этапе компиляции. Например:
const trainingData: ITrainingData[] = [
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] },
];
Для создания Feedforward нейросети применяется класс
NeuralNetwork. Можно задавать параметры сети через объект
конфигурации INeuralNetworkOptions:
import { NeuralNetwork, INeuralNetworkOptions } from 'brain.js';
const config: INeuralNetworkOptions = {
activation: 'sigmoid', // Функция активации: 'sigmoid', 'relu', 'leaky-relu', 'tanh'
hiddenLayers: [3], // Количество нейронов в скрытых слоях
learningRate: 0.01, // Скорость обучения
};
const net = new NeuralNetwork(config);
Параметры activation и learningRate
критичны для сходимости сети. Размер скрытого слоя определяется
экспериментально в зависимости от сложности задачи.
Метод train принимает массив данных с типом
ITrainingData[] и возвращает объект с результатами
обучения:
const result = net.train(trainingData, {
iterations: 20000,
errorThresh: 0.005,
log: true,
logPeriod: 1000,
});
Ключевые параметры:
iterations — максимальное количество эпох
обучения.errorThresh — порог допустимой ошибки.log и logPeriod — позволяют отслеживать
процесс обучения.Тип result имеет структуру:
{
error: number;
iterations: number;
trainingTime: number;
}
После обучения сеть можно использовать для предсказаний через метод
run. Для сохранения типизации рекомендуется явно указывать
тип выходного значения:
const output: number[] = net.run([1, 0]) as number[];
console.log('Предсказание:', output);
Для сетей с объектными входами и выходами:
const outputObj: { [key: string]: number } = net.run({ a: 1, b: 0 }) as { [key: string]: number };
Brain.js позволяет сериализовать обученную сеть в JSON и восстановить её позже:
const json = net.toJSON();
const net2 = new NeuralNetwork();
net2.fromJSON(json);
С помощью TypeScript можно типизировать JSON для проверки структуры:
interface INetworkJSON {
sizes: number[];
layers: Record<string, Record<string, number>>;
outputLookup: boolean;
inputLookup: boolean;
inputMap?: Record<string, number>;
outputMap?: Record<string, number>;
}
Для последовательных данных применяются LSTM и GRU сети:
import { LSTMTimeStep } from 'brain.js';
const lstm = new LSTMTimeStep({
inputSize: 1,
hiddenLayers: [10, 10],
outputSize: 1,
});
const sequenceData = [[1, 2, 3, 4, 5], [10, 20, 30, 40]];
lstm.train(sequenceData, { iterations: 5000 });
Типизация входных данных для последовательностей:
const sequence: number[][] = [[1, 2, 3], [4, 5, 6]];
run.INeuralNetworkOptions,
ILSTMTimeStepOptions).[0, 1] или
[-1, 1].Правильная типизация с TypeScript обеспечивает контроль ошибок на этапе компиляции, упрощает поддержку кода и повышает читаемость больших проектов, использующих Brain.js.