Многовходовые и многовыходные модели

TensorFlow.js предоставляет мощные средства для построения нейронных сетей, способных работать с несколькими входами и несколькими выходами одновременно. Такие модели востребованы в задачах, где требуется обработка разнообразных источников данных или генерация нескольких результатов из одного набора признаков.

Многовходовые модели

Многовходовая модель принимает на вход несколько тензоров различных форматов и типов. Например, один вход может представлять изображения, а другой — числовые признаки или текстовую информацию.

Создание многовходовой модели начинается с определения отдельных входных слоев:

const inputImage = tf.input({shape: [64, 64, 3], name: 'image_input'});
const inputFeatures = tf.input({shape: [10], name: 'features_input'});

Каждый вход может быть обработан своей последовательностью слоев:

const convLayer = tf.layers.conv2d({filters: 32, kernelSize: 3, activation: 'relu'}).apply(inputImage);
const flattenLayer = tf.layers.flatten().apply(convLayer);

const denseFeatures = tf.layers.dense({units: 32, activation: 'relu'}).apply(inputFeatures);

После этого результаты отдельных ветвей можно объединить с помощью слоя concatenate:

const concatenated = tf.layers.concatenate().apply([flattenLayer, denseFeatures]);
const output = tf.layers.dense({units: 1, activation: 'sigmoid'}).apply(concatenated);

Создание модели выполняется через указание всех входов и выходов:

const model = tf.model({
  inputs: [inputImage, inputFeatures],
  outputs: output
});

Многовыходные модели

Многовыходная модель генерирует несколько результатов из одного или нескольких входов. Это полезно для задач, где требуется предсказание нескольких величин одновременно, например, классификация и регрессия на одном наборе данных.

Пример многовыходной модели:

const sharedInput = tf.input({shape: [20], name: 'shared_input'});
const sharedDense = tf.layers.dense({units: 64, activation: 'relu'}).apply(sharedInput);

const classificationOutput = tf.layers.dense({units: 3, activation: 'softmax', name: 'class_output'}).apply(sharedDense);
const regressionOutput = tf.layers.dense({units: 1, activation: 'linear', name: 'reg_output'}).apply(sharedDense);

const multiOutputModel = tf.model({
  inputs: sharedInput,
  outputs: [classificationOutput, regressionOutput]
});

При компиляции многовыходной модели можно указать отдельные функции потерь и метрики для каждого выхода:

multiOutputModel.compile({
  optimizer: 'adam',
  loss: {
    class_output: 'categoricalCrossentropy',
    reg_output: 'meanSquaredError'
  },
  metrics: {
    class_output: ['accuracy'],
    reg_output: ['mse']
  }
});

Передача данных в многовходовые и многовыходные модели

Для многовходовых моделей данные передаются в виде объекта или массива:

const xTrain = {
  image_input: imagesTensor,
  features_input: featuresTensor
};

const yTrain = labelsTensor;

await model.fit(xTrain, yTrain, {epochs: 10, batchSize: 32});

Для многовыходных моделей структура выходных данных также может быть объектом:

const yTrain = {
  class_output: classLabelsTensor,
  reg_output: regValuesTensor
};

await multiOutputModel.fit(xTrain, yTrain, {epochs: 20, batchSize: 64});

Особенности проектирования сложных моделей

  1. Ветвление сети — каждая ветвь может иметь свои слои и функции активации, что позволяет адаптировать обработку под разные типы входных данных.
  2. Объединение признаков — использование concatenate, add или multiply для слияния ветвей сети перед выходными слоями.
  3. Названия входов и выходов — обязательны для корректного сопоставления данных при обучении.
  4. Регулировка весов потерь — в многовыходных моделях можно задавать коэффициенты для каждой функции потерь через параметр lossWeights, что позволяет балансировать обучение между разными задачами.

Использование слоев Functional API

TensorFlow.js рекомендует использовать Functional API для создания сложных моделей, так как Sequential API не поддерживает множественные входы или выходы. Это дает гибкость в построении параллельных и ветвящихся архитектур.

Примеры реальных задач

  • Одновременная классификация изображения и предсказание числовых характеристик объекта.
  • Модель рекомендаций с объединением истории пользователя и информации о товаре.
  • Генерация нескольких связанных предсказаний, например, температура и влажность на основе погодных данных.

Многовходовые и многовыходные модели обеспечивают высокий уровень гибкости и расширяют возможности анализа и предсказания сложных данных в браузере и на сервере с помощью TensorFlow.js.