我正在尝试keras IMDB数据的示例,数据形状如下:
x_train形状:(25000,80)
我只是将keras示例的原始代码更改为以下代码:
model = Sequential()
layer1 = Embedding(max_features, 128)
layer2 = LSTM(128, dropout = 0.2, recurrent_dropout = 0.2, return_sequences = True)
layer3 = Dense(1, activation = 'sigmoid')
model.add(layer1)
model.add(layer2)
model.add(layer3)
原始模型将return_sequences
设置为False
,我将其更改为True
,我遇到了此错误:
期望dense_1具有3个维度,但是具有形状的阵列(25000,1)
但我打印了模型的结构,发现LSTM图层的输出正是一个3D张量:
lstm_1(LSTM):(无,无,128)
答案 0 :(得分:0)
您需要重塑训练阵列,使用以下代码:
x_train = np.reshape(x_train,(x_train.shape[0],1,x_train.shape[1]))
您的测试阵列:
x_test = np.reshape(x_test,(x_test.shape[0],1,x_test.shape[1]))
仅供参考:np是numpy pacakge。
LSTM模型中的时间步长:https://machinelearningmastery.com/use-timesteps-lstm-networks-time-series-forecasting/
时间步:这相当于您运行复现神经网络的时间步长。如果您希望您的网络具有60个字符的内存,则此数字应为60。
答案 1 :(得分:0)
我认为在LSTM之后你需要一个TimeDistributed层,其中return_sequences = True
layer2= LSTM(128, dropout=0.2,
recurrent_dropout=0.2,return_sequences=True)
layer3= TimeDistributed(Dense(1, activation='sigmoid')))