Изменение тензора кераса (ошибка формы ввода lstm) - PullRequest
0 голосов
/ 17 февраля 2019

Я использую LSTM на кератах и ​​использую слой с изменением формы в надежде, что мне не нужно указывать форму для слоя LSTM.

входное значение 84600 x 6

84600секунд через 2 месяца.6 метрик / [меток] я измеряю в течение 2 месяцев

, пока у меня есть

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Reshape((86400,1,6), input_shape=(84600, 6)))
model.add(tf.keras.layers.LSTM(128,  activation='relu', input_shape= 
(x_train.shape), return_sequences=True))
model.add(tf.keras.layers.Dense(10, activation='softmax'))

, который выдает ошибку:

ValueError: Input 0 of layer lstm is incompatible with the layer: expected ndim=3, found ndim=4. Full shape received: [None, 86400, 1, 6]

это понятно.Размер пакета плюс 3 слоя равен 4. Однако, когда я изменяю форму

model.add(tf.keras.layers.Reshape((86400,1,6), input_shape=(84600, 6)))
vvvvvvv
model.add(tf.keras.layers.Reshape((86400,6), input_shape=(84600, 6)))

Он выбрасывает

ValueError: Error when checking input: expected reshape_input to have 3 dimensions, but got array with shape (86400, 6)

Кажется, что размер пакета игнорируется как элемент массива.И трактует это как 2 индекса.Он переходит с 4 измерений на 2 измерения.

Проблема в том, что LSTM принимает 3 измерения в качестве входных данных, и я не могу этого понять.В идеале я хочу массив / тензор 86400 x 1 x 6.Так получается 84600 примеров данных 1x6.

Большое спасибо!

1 Ответ

0 голосов
/ 18 февраля 2019

Проблема в том, что способ изменения формы ввода несовместим со слоем LSTM.Слой LSTM ожидает ввода с 3 измерениями: (batch_size, timesteps, features).Тем не менее, вы подаете ему вход с формой (batch_size, 84600, 1, 6).

. В вашем случае кажется, что 84600 - это количество временных шагов, а 6 - количество объектов на временном шаге.Поэтому имеет смысл оставить слой Reshape и просто использовать input_shape (84600, 6) для слоя LSTM:

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.LSTM(128,  activation='relu', input_shape=(84600, 6), return_sequences=True))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...