我正在对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,)之间的差异。
答案 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'))
让我知道是否可以解决此问题。