Keras LSTM выводит другой размер, чем ожидалось - PullRequest
0 голосов
/ 03 марта 2019

Я использую LSTM для данных fMRI.Наши входные данные поступают с input_shape (временные шаги, функции) = (495,359320) и меткой данных (495,).У меня проблема с тем, что выводит слой LSTM.

   MAX_SLIDER_VALUE=127
   EPOCHS=3
   BATCH_SIZE=1
   LOSS='mean_squared_error'
   OPTIMIZER='RMSprop'

   model=Sequential()
`  model.add(LSTM(units=MAX_SLIDER_VALUE,` activation=keras.layers.LeakyReLU(alpha=.025),dropout=.08,input_shape=(495,359320)))
   model.add(Dense(units=MAX_SLIDER_VALUE,activation='softmax'))``

   model.compile(loss=LOSS,optimizer=OPTIMIZER, metrics=['acc','mae']) 

   model.fit(np.array(train_subset_nii),np.array(train_subset_labels),
   epochs=EPOCHS,batch_size=BATCH_SIZE)

Проверка выходного слоя модели с использованием отладчика pdb показывает, что выходной уровень 0-го слоя должен быть (127,), но я получаю значение errorError, где оно выводится как (495,).

model.layers[0].input_shape
(None, 495, 359320)

model.layers[0].output_shape
(None, 127)

model.layers[1].input_shape
(None, 127)

model.layers[1].output_shape
(None, 127)


ValueError: Error when checking target: expected dense_5 to have shape (127,) but got array with shape (495,)

Дополнительное примечание:

Код обучается и запускается, если мы изменим вывод, чтобы соответствовать количеству временных шагов

MAX_SLIDER_VALUE=495

Я пытаюсь вычислитьчто вызывает несоответствие между (127,) и (495,).

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Полагаю, с MAX_SLIDER_VALUE=127 вы получите выход (127,), поскольку ваш плотный слой состоит из 127 нейронов.

Проблема в том, как ваша модель может сравнить прогноз (127,) с измерением метки как (495,)?Для меня это не будет работать логически во-первых.

Вы можете попробовать изменить эту строку:

model.add(Dense(units=MAX_SLIDER_VALUE,activation='softmax'))

на

model.add(Dense(units=495,activation='softmax'))

Дайте мне знать, исправили ли это.

0 голосов
/ 03 марта 2019

LSTM по умолчанию для return_sequence - False, поэтому слой LSTM будет выводить только последний вывод ячейки -> (Нет (пакетный), единиц = MAX_SLIDER_VALUE).Если вы хотите вывести (None, 495, MAX_SLIDER_VALUE), измените return_sequence на True в инициализации LSTM (единицы не должны быть MAX_SLIDER_VALUE), а в качестве плотных единиц - MAX_SLIDER_VALUE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...