Машинное обучение на TypeScript: обзор ключевых библиотек
TypeScript — статически типизированная надстройка над JavaScript — всё активнее используется в проектах, связанных с машинным обучением (ML). Благодаря строгой типизации, улучшенной читаемости кода и отличной поддержке IDE, TypeScript позволяет создавать надёжные ML-приложения, работающие как в браузере, так и на сервере (Node.js). В этой статье мы рассмотрим основные библиотеки для машинного обучения на TypeScript, их возможности и приведём практические примеры.
1. TensorFlow.js — флагман машинного обучения на TypeScript
TensorFlow.js — это порт популярного фреймворка TensorFlow для JavaScript и TypeScript. Он позволяет запускать модели машинного обучения непосредственно в браузере или на Node.js без серверной инфраструктуры. Библиотека поддерживает все основные этапы ML: загрузку предобученных моделей, обучение новых моделей, инференс (предсказание) и даже тонкую настройку (fine-tuning).
Установка:
npm install @tensorflow/tfjs
npm install @tensorflow/tfjs-node # для Node.js (с ускорением)
Пример: классификация изображений с предобученной моделью MobileNet
import * as tf from '@tensorflow/tfjs';
import { loadGraphModel } from '@tensorflow/tfjs-converter';
async function classifyImage(imageElement: HTMLImageElement) {
// Загружаем предобученную модель MobileNet
const model = await loadGraphModel(
'https://tfhub.dev/google/tfjs-model/imagenet/mobilenet_v2_100_224/classification/3/default/1'
);
// Преобразуем изображение в тензор
const tensor = tf.browser.fromPixels(imageElement)
.resizeNearestNeighbor([224, 224])
.toFloat()
.expandDims();
// Получаем предсказание
const prediction = model.predict(tensor) as tf.Tensor;
const topK = tf.topk(prediction, 3);
const indices = await topK.indices.data();
const values = await topK.values.data();
console.log('Топ-3 предсказания:', indices, values);
}
// Использование
const img = document.getElementById('myImage') as HTMLImageElement;
classifyImage(img);
TensorFlow.js идеально подходит для задач компьютерного зрения, обработки текста (NLP) и временных рядов. В TypeScript вы получаете автодополнение для всех методов, что значительно ускоряет разработку.
2. ML5.js — дружелюбный интерфейс для творческого ML
ML5.js построен поверх TensorFlow.js, но предлагает более простой и высокоуровневый API. Эта библиотека ориентирована на художников, дизайнеров и разработчиков, которые хотят быстро добавить ML-функциональность без глубокого погружения в математику. ML5.js поддерживает такие задачи, как классификация изображений, обнаружение объектов, генерация текста, анализ звука и многое другое.
Установка:
npm install ml5
Пример: обнаружение объектов с помощью COCO-SSD
import ml5 from 'ml5';
async function detectObjects(videoElement: HTMLVideoElement) {
// Загружаем модель обнаружения объектов
const objectDetector = await ml5.objectDetector('cocossd');
// Выполняем детекцию на видео
const results = await objectDetector.detect(videoElement);
results.forEach((obj: any) => {
console.log(`Объект: ${obj.label}, уверенность: ${obj.confidence.toFixed(2)}`);
console.log(`Координаты: x=${obj.x}, y=${obj.y}, ширина=${obj.width}, высота=${obj.height}`);
});
}
// Использование с веб-камерой
const video = document.getElementById('webcam') as HTMLVideoElement;
navigator.mediaDevices.getUserMedia({ video: true })
.then(stream => { video.srcObject = stream; })
.then(() => detectObjects(video));
ML5.js отлично подходит для прототипирования, образовательных проектов и интерактивных инсталляций. В TypeScript вы можете определить типы для результатов детекции, что делает код более надёжным.
3. Brain.js — простые нейронные сети для TypeScript
Brain.js — лёгкая библиотека для создания и обучения нейронных сетей. Она поддерживает многослойные перцептроны, рекуррентные сети (LSTM) и даже сети с обучением с подкреплением. Brain.js очень проста в использовании и не требует глубоких знаний ML. Идеально подходит для задач регрессии, классификации и прогнозирования временных рядов.
Установка:
npm install brain.js
Пример: обучение сети XOR (исключающее ИЛИ)
import brain from 'brain.js';
// Создаём нейронную сеть с одним скрытым слоем
const net = new brain.NeuralNetwork({
hiddenLayers: [3], // один скрытый слой с 3 нейронами
});
// Обу