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});
concatenate, add или multiply для
слияния ветвей сети перед выходными слоями.lossWeights, что позволяет балансировать обучение между
разными задачами.TensorFlow.js рекомендует использовать Functional API для создания сложных моделей, так как Sequential API не поддерживает множественные входы или выходы. Это дает гибкость в построении параллельных и ветвящихся архитектур.
Многовходовые и многовыходные модели обеспечивают высокий уровень гибкости и расширяют возможности анализа и предсказания сложных данных в браузере и на сервере с помощью TensorFlow.js.