TensorFlow dynamic RNN (LSTM): как форматировать входные данные?

мне были даны некоторые данные этого формата и следующие подробности:

person1, day1, feature1, feature2, ..., featureN, label
person1, day2, feature1, feature2, ..., featureN, label
...
person1, dayN, feature1, feature2, ..., featureN, label
person2, day1, feature1, feature2, ..., featureN, label
person2, day2, feature1, feature2, ..., featureN, label
...
person2, dayN, feature1, feature2, ..., featureN, label
...
  • всегда есть одинаковое количество функций, но каждая функция может быть 0, представляющая ничего
  • существует различное количество дней, доступных для каждого человека, например, person1 имеет 20 дней данных, person2 имеет 50

цель предсказать ярлык человека на следующий день, поэтому ярлык для dayN+1, либо на человека основа, или в целом (на человека имеет больше смысла для меня). Я могу свободно переформатировать данные (это не большой). На основе вышесказанного после некоторого чтения я подумал, что динамический RNN (LSTM) может работать лучше всего:

  • рекуррентная нейронная сеть: потому что следующий день зависит от предыдущего дня
  • lstm: потому что модель строит вверх с каждым днем
  • динамическая: потому что не все функции присутствуют каждый день

Если это не имеет смысла для данных у меня нет, пожалуйста, остановите меня здесь. Вопрос тогда:

как дать / отформатировать эти данные для tensorflow / tflearn?

Я посмотрел на этой пример использования tflearn, но я не понимаю его формат ввода, чтобы я мог "зеркально" его к моему. Аналогично, нашли этой сообщение по очень похожему вопросу, но похоже, что образцы плаката не связаны между собой, как они в моем. Мой опыт работы с tensorflow ограничивается его начать страница.

1 ответов


динамическая: потому что не все функции присутствуют каждый день

у вас здесь неправильная концепция динамики. Динамический РНН в Tensorflow означает, что график динамически создается во время выполнения, но входные данные всегда одинакового размера (0, так как отсутствие функции должно работать нормально).

в любом случае, то, что у вас есть здесь, - это последовательности различной длины (day1 ... день?) векторов признаков (feature1 ... функцияn). Во-первых, вам нужно LSTM ячейка

cell = tf.contrib.rnn.LSTMcell(size)

таким образом, вы можете создать динамически развернутый график rnn, используя tf.НН.dynamic_rnn. Из документов:

входы: входы RNN.

если time_major == False (по умолчанию), это должен быть Тензор формы: [batch_size, max_time,...], или вложенный кортеж таких элементов.

где max_time относится к длине входной последовательности. Поскольку мы используем dynamic_rnn, длина последовательности не необходимо определить во время компиляции, чтобы ваш заполнитель ввода мог быть:

x = tf.placeholder(tf.float32, shape=(batch_size, None, N))

который затем подается в rnn, как

outputs, state = tf.nn.dynamic_rnn(cell, x)

означает, что ваши входные данные должны иметь форму (batch_size, seq_length, N). Если примеры в одной партии имеют различную длину, вы должны заполнить их 0-векторами до максимальной длины и передать соответствующее до dynamic_rnn

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