Keras: категорический против непрерывного ввода в LSTM - PullRequest
0 голосов
/ 04 июня 2018

Я новичок в Keras и углубленное изучение, и после прохождения нескольких учебных пособий и ответов по stackoverflow, мне все еще неясно, как манипулировать вводом при входе в сеть.

Я использую функциональный APIКерас разрабатывать сложные модели, поэтому мой первый слой всегда является входным слоем.Что-то вроде:

Input ()

LSTM ()

Dense ()

Теперь допустим, у меня есть 2 набора обучающих данныхA и B. Каждый набор данных идентичен матрице 10000 на 6000 с 200 различными значениями в нем.т.е. 10000 строк, каждая из которых представляет обучающие примеры и 6000 последовательностей временных шагов.Значения в обоих: [[3,50,1,22,7,5,3,1,5, ..], [55,32,54,21,15, ...], ....]Единственная разница между A и B состоит в том, что значения в A являются действительными числами (непрерывная переменная), а значения B являются дискретными (категориальные переменные).

У меня есть следующие 3 возможных варианта, которые я могу использовать дляПроведите различие между категориальным и непрерывным вводом данных и хотели бы спросить, какие из них будут работать, а какие лучше, чем другие.

1 - Учитывая, что A является действительным значением, а B является категоричным, преобразуйте A в .astype (float) иB в .astype (float) и подача в сеть, и сеть примет соответственно.

2 - Учитывая, что B имеет категориальные значения, преобразуйте B в настройку одного горячего вектора, то есть изменив 10000 на 6000 до 10000 на 6000на 200. Оставьте A как есть.

3- Если мы используем B, добавьте слой внедрения после ввода и сделаем сеть такой:

Input ()

Embedding ()

LSTM ()

Dense ()

Если мыиспользуйте A, тогда не добавляйте слой для встраивания.

1 Ответ

0 голосов
/ 04 июня 2018

Кажется, категорический ввод сбивает вас с толку.Встраивать или не встраивать:

  1. Мы встраиваем категориальный ввод, используя слой Embedding, для двух случаев: уменьшить размер пространства и зафиксировать любые сходства между вводом.Поэтому, когда у вас есть миллиарды слов в языке, имеет смысл встроить их в 300-мерный вектор, чтобы сделать его управляемым.Но «горячая» всегда дает наибольшее различие, поэтому в вашем случае 200 - не большое число, скажем, и «горячая» - это путь.
  2. Для непрерывного ввода мы нормализуем часто с простой нормализацией max-min, поэтому max становится 1, а min становится 0. Но есть много способов сделать это в зависимости от природы вашего набора данных.
  3. Для реальной модели вы можете сделать 2 входаэтот процесс непрерывен и категорически различен и может совместно использовать слои в восходящем направлении, в противном случае может иметь смысл создание 2 разных моделей.

Вы можете найти дополнительную информацию онлайн , которая охватывает кодирование ввода.

...