Предобработка данных — ключевой этап при работе с любыми моделями машинного обучения. Правильная подготовка входных данных позволяет ускорить обучение, повысить точность модели и избежать численных ошибок. В контексте TensorFlow.js предобработка включает масштабирование, нормализацию и изменение размера данных, особенно изображений.
Масштабирование необходимо для приведения числовых данных к диапазону, удобному для работы нейронной сети. Без масштабирования значения признаков могут сильно различаться по порядку величины, что замедляет обучение и ухудшает сходимость.
Пример масштабирования числовых массивов:
import * as tf from '@tensorflow/tfjs';
const data = tf.tensor([10, 20, 30, 40, 50]);
// Масштабирование к диапазону [0, 1]
const scaledData = data.div(tf.max(data));
scaledData.print(); // [0, 0.25, 0.5, 0.75, 1]
Ключевые моменты масштабирования:
Нормализация данных подразумевает приведение признаков к единому масштабу на основе статистических характеристик: среднего значения и стандартного отклонения. В отличие от простого масштабирования, нормализация учитывает распределение данных.
Пример нормализации массива:
const data = tf.tensor([10, 20, 30, 40, 50]);
const mean = data.mean();
const std = data.sub(mean).square().mean().sqrt();
const normalizedData = data.sub(mean).div(std);
normalizedData.print();
Особенности нормализации:
Многие модели требуют входные изображения фиксированного размера.
TensorFlow.js позволяет масштабировать изображения без потери структуры
с помощью методов tf.image.resizeBilinear и
tf.image.resizeNearestNeighbor.
Пример изменения размера изображения:
const image = tf.browser.fromPixels(document.getElementById('myImage'));
// Изменение размера до 128x128 пикселей
const resizedImage = tf.image.resizeBilinear(image, [128, 128]);
resizedImage.print();
Особенности изменения размера:
resizeBilinear сглаживает изображение, обеспечивая
более естественный результат.resizeNearestNeighbor используется для категориальных
изображений, где важно сохранить исходные цвета без сглаживания.Эффективная подготовка данных часто требует последовательного применения нескольких методов:
Пример полного предобработочного пайплайна для изображений:
const image = tf.browser.fromPixels(document.getElementById('myImage'))
.resizeBilinear([128, 128]) // изменение размера
.div(255.0) // масштабирование к [0,1]
.expandDims(); // добавление измерения батча
Ключевые аспекты такого подхода:
[batch, height, width, channels].В совокупности эти методы создают прочную основу для обучения и инференса моделей TensorFlow.js, обеспечивая стабильность, точность и эффективность работы нейронных сетей.