tf.keras (RNN) Проблемы с уровнем при запуске model.fit () - PullRequest
1 голос
/ 28 февраля 2020

Я строю RNN для анализа данных захвата движения (MoCap) с использованием TensorFlow, Pandas и Keras.

О моих данных:

  • Данные получены через pandas.read_csv и имеет форму (832, 165)
  • Каждая строка обозначает целый кадр данных в последовательности движения (832 кадра)
  • Каждый столбец обозначает данные вращения для соединения (Всего 165 соединений)

Я пытаюсь подавать данные по одной строке за раз. На выходе должен быть следующий кадр в последовательности движения. Я продолжаю сталкиваться с различными типами ошибок при запуске model.fit.

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

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

Использует tf.data.Dataset в качестве ввода

Версия 1 Код / Выход

Версия 2 Код / Выход

Версия 3: [Код ] [Вывод]

Использует pandas массивы для ввода и цели

Версия 4 Код / Вывод

Версия 5 Код / Выход

1 Ответ

0 голосов
/ 22 апреля 2020

Используя Код 4 в качестве основы для устранения неполадок, я заметил, что вы передаете несовместимые формы в слои.

Эта строка model.add(keras.layers.InputLayer(input_shape = (N_TIMESTEPS, N_FEATURES))) ожидает ваших данных иметь одинаковую форму. В то время как ваши данные имеют (832, 165), что составляет N_SAMPLES в первом индексе, а N_FEATURES , N_TIMESTEPS отсутствует .

First , вы должны создать модифицированный набор данных, который будет генерировать форму (N_SAMPLES, N_TIMESTEPS, N_FEATURES).

Вот пример для создания фиктивного набора данных:

data = tf.random.normal((N_SAMPLES, N_TIMESTEPS, N_FEATURES))
target = tf.random.normal((N_SAMPLES, N_TIMESTEPS, N_FEATURES))

N_TIMESTEPS в ваших данных важен в LSTM, так как он определяет, сколько TIME_STEPS следует учитывать для обновления .

Вот полный код, используемый для имитации успешного выполнения в Google Colab.

%tensorflow_version 2.x  # To ensure latest Tensorflow version in Google Colab

import tensorflow as tf
import tensorflow.keras as keras

print(tf.__version__) # Tensorflow 2.2.0-rc3

BATCH_SIZE = 1
N_TIMESTEPS = 10
#Data is obtained through pandas.read_csv and has a shape of (832, 165)
#Each row denotes a whole frame of data in a movement sequence (832 frames)
#Each column denotes the rotational data for a joint (165 joints total)
# N_SAMPLES = data.values.shape[0]
# N_FEATURES = data.values.shape[1]
N_SAMPLES  = 832
N_FEATURES = 165

def get_compiled_model():
  model = keras.Sequential()
  model.add(keras.layers.InputLayer(input_shape = (N_TIMESTEPS, N_FEATURES)))
  model.add(keras.layers.LSTM(35, activation = 'relu', return_sequences = True))
  model.add(keras.layers.LSTM(35, activation = 'relu', return_sequences = True))
  model.add(keras.layers.Dense(165, activation = 'tanh'))

  model.compile(optimizer = 'adam',
                loss = 'mse',
                metrics = ['accuracy'])

  return model

model = get_compiled_model()
model.summary()

data = tf.random.normal((N_SAMPLES, N_TIMESTEPS, N_FEATURES))
target = tf.random.normal((N_SAMPLES, N_TIMESTEPS, N_FEATURES))

model.fit(data, target, epochs = 15, batch_size = BATCH_SIZE, shuffle = False)

Надеюсь, это поможет вам.

Вы могли прочитать больше о Tensorflow Keras Guide с использованием RNN в этой ссылке .

...