ConvNetJS — это библиотека для глубокого обучения на стороне клиента с использованием JavaScript, ориентированная на нейронные сети, включая сверточные. Несмотря на отсутствие встроенного серверного REST API, модели, созданные в ConvNetJS, могут быть интегрированы с серверными приложениями через стандартные HTTP-запросы. Реализация REST API позволяет использовать обученные сети для предсказаний, передачи весов и управления жизненным циклом модели в веб-приложениях.
REST API для модели обычно строится вокруг трёх ключевых операций:
Каждое действие реализуется отдельным HTTP-эндпоинтом с чётко определёнными форматами запроса и ответа.
ConvNetJS хранит модель в виде JSON-объекта, включающего:
layers): тип слоя
(input, fc, conv,
relu, softmax и др.), параметры слоя
(количество нейронов, фильтры, размер ядра, шаги свертки, паддинг).filters,
biases): массивы чисел, описывающие обученные
параметры.Пример JSON-структуры модели:
{
"layers": [
{"type": "input", "out_sx": 28, "out_sy": 28, "out_depth": 1},
{"type": "conv", "sx": 5, "filters": 8, "stride": 1, "pad": 2},
{"type": "relu"},
{"type": "pool", "sx": 2, "stride": 2},
{"type": "fc", "num_neurons": 10},
{"type": "softmax"}
],
"weights": {
"conv0": {"filters": [...], "biases": [...]},
"fc0": {"weights": [...], "biases": [...]}
},
"trainer": {"method": "sgd", "learning_rate": 0.01, "momentum": 0.9}
}
JSON-формат обеспечивает совместимость между клиентом и сервером и позволяет полностью восстановить модель без необходимости повторного обучения.
/load_modelНазначение: загрузка модели на сервер для последующих предсказаний.
Метод: POST Тело запроса:
JSON-объект модели, включая layers и
weights.
Пример запроса:
POST /load_model
Content-Type: application/json
{
"layers": [...],
"weights": {...},
"trainer": {...}
}
Ответ сервера:
{
"status": "success",
"message": "Model loaded successfully"
}
После загрузки модель может быть использована для предсказаний без пересоздания структуры на сервере.
/predictНазначение: получение результатов предсказания по входным данным.
Метод: POST Тело запроса: массив входных значений, соответствующих размеру входного слоя.
Пример запроса:
POST /predict
Content-Type: application/json
{
"input": [0.0, 0.1, 0.5, ..., 0.0]
}
Алгоритм обработки на сервере:
Vol с входными данными.forward() сети:
net.forward(vol).net.getPrediction() или
net.getProbabilities() для вероятностного выхода.Ответ сервера:
{
"prediction": 7,
"probabilities": [0.01, 0.02, 0.03, ..., 0.85]
}
/trainНазначение: дообучение модели с использованием новых данных или корректировка весов.
Метод: POST Тело запроса: объект с массивами входов и целевых меток.
Пример запроса:
POST /train
Content-Type: application/json
{
"inputs": [[0.0, 0.1, ..., 0.0], [...]],
"targets": [7, 3]
}
Алгоритм на сервере:
Vol.forward() выполняет прямой проход.backward() вычисляет градиенты ошибки.trainer.update() корректирует веса сети.Ответ сервера:
{
"status": "success",
"message": "Training step completed"
}
Использование REST API позволяет интегрировать модель в распределённые приложения, обеспечивая обучение и предсказания через стандартные HTTP-запросы.
ConvNetJS использует числовые массивы и JSON для обмена данными. Основные рекомендации:
[0, 1] или [-1, 1].width × height × depth
должна соответствовать входному слою сети.JSON обеспечивает простую интеграцию с фронтендом, Node.js-серверами и сторонними приложениями.
/load_model./predict и получает
вероятности классов./train для дообучения сети.Такой подход обеспечивает гибкость, лёгкость интеграции с веб-приложениями и возможность развёртывания моделей ConvNetJS в распределённых системах.