Не теряет информацию keras.layers.Flatten? - PullRequest
1 голос
/ 30 мая 2020

Совершенно новый для keras и ML в целом. Я смотрю на https://machinelearningmastery.com/use-word-embedding-layers-deep-learning-keras/, и он использует Flatten между Embedding и Dense, потому что Embedding создает 2D-вектор, но Dense требует одномерного измерения.

Я уверен, что мне не хватает здесь есть кое-что очевидное, но почему при этом не теряется, какие слова в каких входных векторах? Как мы можем узнать, что вход № 3 был «хорошей работой» и связан с меткой № 3, 1 для «положительного»?

Я предполагаю, что исходные размеры сохраняются из исходного ввода, а затем как-то восстанавливать для выхода Dense? Или мне просто не хватает важного концептуального аспекта?

model = Sequential()
model.add(Embedding(vocab_size, 8, input_length=max_length))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))

Спасибо за любые рекомендации!

1 Ответ

0 голосов
/ 30 мая 2020

Встраиваемый слой дает вам вектор для каждого токена слова, поэтому результат будет 2-мерным. Нам нужно использовать flatten перед любым блоком классификатора.

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

В вашем примере временное измерение больше не поддерживается, обычно желательно передать вывод встраивания матрица в слой RNN / Conv для дальнейшего извлечения признаков.

  • Flatten применяется только к не-пакетному измерению, то есть примеры по-прежнему разделены (если вы имеете в виду это).

  • Для каждого образца, скажем nice work, мы получаем 2 вектора (1 для хорошего, 1 для работы), теперь мы хотим узнать только общее настроение предложения, поэтому, как только мы извлеките элементы, мы можем применить сглаживание.

...