Машинное обучение на TypeScript: обзор библиотек для ML в 2024
TypeScript уверенно занимает нишу не только веб-разработки, но и Data Science. Благодаря статической типизации и совместимости с JavaScript, он становится удобным инструментом для построения моделей машинного обучения (ML), которые работают прямо в браузере или на сервере (Node.js). В этой статье мы разберём ключевые библиотеки для машинного обучения на TypeScript, их особенности, примеры кода и сценарии применения.
1. TensorFlow.js — главный фреймворк для ML в браузере
TensorFlow.js — это порт популярного фреймворка TensorFlow на JavaScript/TypeScript. Он позволяет запускать обучение и инференс моделей как в браузере, так и в Node.js. Библиотека поддерживает GPU-ускорение через WebGL и WebGPU, что даёт прирост производительности.
Основные возможности:
- Создание нейронных сетей с помощью высокоуровнего API (tf.sequential, tf.model).
- Загрузка предобученных моделей из TensorFlow Hub.
- Преобразование моделей из Python-версии TensorFlow в формат .json.
- Работа с тензорами, оптимизаторами и слоями.
Пример: линейная регрессия на TypeScript
import * as tf from '@tensorflow/tfjs';
// Данные: зависимость y = 2x - 1
const xs = tf.tensor2d([-1, 0, 1, 2, 3, 4], [6, 1]);
const ys = tf.tensor2d([-3, -1, 1, 3, 5, 7], [6, 1]);
// Создание модели
const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]}));
// Компиляция
model.compile({optimizer: 'sgd', loss: 'meanSquaredError'});
// Обучение
model.fit(xs, ys, {epochs: 250}).then(() => {
model.predict(tf.tensor2d([10], [1, 1])).print();
// Вывод: ~19 (близко к 2*10 - 1 = 19)
});
2. ML5.js — библиотека для творческого ML
ML5.js построена поверх TensorFlow.js и ориентирована на простоту использования. Она предоставляет готовые модели для распознавания изображений, звука, текста и жестов. Идеально подходит для образовательных проектов и прототипирования.
Пример: классификация изображений
import * as ml5 from 'ml5';
// Загрузка предобученной модели MobileNet
const classifier = ml5.imageClassifier('MobileNet');
// Классификация изображения
const img = document.getElementById('myImage') as HTMLImageElement;
classifier.classify(img, (err: Error | null, results: any[]) => {
if (err) console.error(err);
else console.log('Результат:', results[0].label);
});
3. Brain.js — нейросети для Node.js и браузера
Brain.js — лёгкая библиотека для построения нейронных сетей на JavaScript/TypeScript. Поддерживает различные архитектуры: LSTM, RNN, GRU. Отлично подходит для задач прогнозирования временных рядов и обработки текста.
Пример: простая нейросеть для XOR
import 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] }
]);
const output = net.run([1, 0]); // ~0.99
console.log(output);
4. Synaptic — архитектурно гибкая библиотека
Synaptic позволяет создавать нейронные сети любой архитектуры, включая многослойные перцептроны, сети с обратной связью и самоорганизующиеся карты Кохонена. Не требует зависимостей и работает в браузере.
Пример: создание перцептрона
import { Architect, Trainer } from 'synaptic';
const network = new Architect.Perceptron(2, 3, 1);
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] }
], { iterations: 1000 });
console.log(network.activate([1, 0])); // ~0.98
5. Danfo.js — библиотека для работы с данными
Danfo.js — аналог pandas для JavaScript/TypeScript. Предоставляет DataFrame и Series для обработки табличных данных, статистических расчётов и визуализации. Часто используется как этап предобработки данных перед
Также в библиотеке
gRPC для Swift (iOS/macOS): библиотеки, настройка и примеры
Отправка email на Rust: библиотеки lettre и mailparse для писем
Работа с ZIP-архивами в Java: полное руководство по java.util.zip