Keras LSTM输出的尺寸与预期的不同

时间:2019-03-03 01:08:14

标签: keras lstm

我正在对fMRI数据运行LSTM。我们的输入数据带有input_shape(timesteps,features)=(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,),但我正在获取valueError,其输出为(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 :(得分:0)

return_sequences的LSTM默认值为False,因此LSTM层将仅输出最后一个单元输出->(无(批),单位= MAX_SLIDER_VALUE)。如果要输出(无,495,MAX_SLIDER_VALUE),则在LSTM初始化中将return_sequences更改为True(单位不必为MAX_SLIDER_VALUE),将密度单位更改为MAX_SLIDER_VALUE。

答案 1 :(得分:0)

我想,MAX_SLIDER_VALUE=127的输出为(127,),因为您的致密层是127个神经元。

问题是,您如何让模型将(127,)的预测与标签尺寸为(495,)的预测进行比较?对我来说,从一开始它就不会在逻辑上起作用。

您可以尝试更改此行:

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

进入

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

让我知道是否可以解决此问题。