Машинное обучение на TypeScript: обзор библиотек и инструментов
TypeScript — это не просто строгая типизация для JavaScript. Благодаря своей экосистеме и совместимости с JS, он становится мощной платформой для машинного обучения (ML) прямо в браузере или на сервере (Node.js). В этой статье мы разберём четыре ключевые библиотеки, которые позволяют разрабатывать, обучать и запускать модели ML на TypeScript.
1. TensorFlow.js — флагман ML в TypeScript
TensorFlow.js — это порт популярного фреймворка TensorFlow на JavaScript/TypeScript. Он поддерживает как браузер, так и Node.js. Основное преимущество — возможность выполнять обучение и инференс (вывод) прямо на стороне клиента без отправки данных на сервер.
Установка
npm install @tensorflow/tfjs
npm install @tensorflow/tfjs-node // для Node.js с ускорением CPU
npm install @tensorflow/tfjs-node-gpu // для GPU
Пример: линейная регрессия на TypeScript
import * as tf from '@tensorflow/tfjs';
// Создаем простую модель: y = 2x - 1
const model = tf.sequential();
model.add(tf.layers.dense({ units: 1, inputShape: [1] }));
// Компиляция
model.compile({ optimizer: 'sgd', loss: 'meanSquaredError' });
// Обучающие данные
const xs = tf.tensor2d([0, 1, 2, 3, 4], [5, 1]);
const ys = tf.tensor2d([-1, 1, 3, 5, 7], [5, 1]);
// Обучение
model.fit(xs, ys, { epochs: 250 }).then(() => {
// Предсказание для x=5
const output = model.predict(tf.tensor2d([5], [1, 1])) as tf.Tensor;
output.print(); // ≈ 9 (2*5 - 1)
});
TensorFlow.js также поддерживает загрузку предобученных моделей (например, MobileNet для классификации изображений) и работу с графами вычислений.
2. ML5.js — ML для креативных проектов
ML5.js построен поверх TensorFlow.js и ориентирован на простоту использования. Идеален для художников, дизайнеров и новичков в ML. Библиотека предоставляет высокоуровневые API для задач классификации, генерации текста, распознавания жестов и т.д.
Установка
npm install ml5
Пример: классификация изображений (MobileNet)
import * as ml5 from 'ml5';
// Загружаем предобученную модель MobileNet
const classifier = ml5.imageClassifier('MobileNet');
// Классифицируем изображение по URL
const img = new Image();
img.crossOrigin = 'anonymous';
img.src = 'https://example.com/cat.jpg';
img.onload = () => {
classifier.classify(img, (err: Error | null, results: any[]) => {
if (err) {
console.error(err);
return;
}
console.log('Результаты:', results);
// [{ label: 'tabby cat', confidence: 0.98 }, ...]
});
};
ML5.js автоматически загружает веса модели и предоставляет простой колбэк. Отлично подходит для быстрых прототипов и интерактивных инсталляций.
3. Brain.js — нейросети без сложностей
Brain.js — это библиотека для создания нейронных сетей с минимальным количеством кода. Поддерживает прямые сети, LSTM и RNN. Работает как в браузере, так и в Node.js.
Установка
npm install brain.js
Пример: XOR-функция (логическое исключающее ИЛИ)
import * as brain from 'brain.js';
const net = new brain.NeuralNetwork();
net.train([
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
], {
iterations: 10000,
errorThresh: 0.005
});
const output = net.run([1, 0]); // ≈ 0.98 (близко к 1)
console.log(`Результат: ${output}`);
Brain.js автоматически нормализует данные и поддерживает сохранение/загрузку обученной модели в JSON.
4. Synaptic — архитектурная гибкость
Synaptic — это библиотека для создания сложных нейросетевых архитектур: перцептроны, многослойные сети, LSTM, сети Хопфилда и даже пользовательские топологии. Она не зависит от TensorFlow, что делает её легковесной.
Установка
npm install synaptic