Полносвязные слои являются наиболее широко используемыми классификаторами, однако они страдают одним существенным недостатком: они должны иметь входные данные фиксированной формы. В этой статье мы предлагаем обходной путь, позволяющий использовать полносвязный слой с переменной формой ввода. Это работает, только если у вас есть несколько векторов признаков разных размеров. Если у вас есть небольшой вектор признаков, который может иметь большое количество возможных форм, вы можете проверить TensorFold. Однако, если у вас большой размер вектора признаков, TensorFold не для вас.

Полносвязные слои... Что это такое? и Почему вход должен иметь статическую форму?

Математически это просто матричное умножение между матрицей весов и вектором признаков (вход) плюс вектор смещения. В терминах Tensorflow это операция, и Tensorflow настраивает требуемую форму ввода на основе формы матрицы весов, чтобы умножение матриц было математически правильным. Если входная форма изменится, TensorFlow остановит сеанс и выдаст ошибку о том, что форма вектора признаков отличается от предварительно настроенной формы.

Решение: настройте полносвязный уровень во время выполнения.

Tensorflow (до версии 2.0) — это библиотека типа сборки и запуска, все должно быть предварительно настроено, а затем «скомпилировано» при запуске сеанса. Однако можно добавить динамическое поведение, используя встроенные операции, такие как if..else или switch..case.

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

Вы можете отправить мне электронное письмо по адресу [email protected], если у вас есть вопросы или если вам нужен код.

Плюсы и минусы

Два преимущества этого подхода:

С одной стороны, у вас будет специальная весовая матрица для каждой формы, поэтому ваша модель будет работать лучше, потому что ей не нужно обобщать все входные данные.

С другой стороны, его легко реализовать, если у вас есть базовые знания Tensorflow.

Очевидным недостатком является стоимость памяти для дополнительных весовых матриц, хранящихся в памяти.

Вывод

Хотя этот подход может повысить производительность вашей модели, это не самое элегантное решение. Другой альтернативой является слой билинейного объединения, который также имеет множество вариаций, таких как компактное билинейное объединение.