我正试图在我的模型中添加另一个LSTM层,但我只是一个初学者,我不是很好。我正在使用(更好(-唐纳德·特朗普推特!用于LSTM文本生成的Kaggle数据集。
我正在努力让它运行,因为它返回错误:
<ValueError: Input 0 of layer lstm_16 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, 128]>
我的型号是:
print('Building model...')
model2 = Sequential()
model2.add(LSTM(128, input_shape=(maxlen, len(chars)),return_sequences=True))
model2.add(Dropout(0.5))
model2.add(LSTM(128))
model2.add(Dropout(0.5))
model2.add(LSTM(128))
model2.add(Dropout(0.2))
model2.add(Dense(len(chars), activation='softmax'))
# optimizer = RMSprop(lr=0.01)
optimizer = Adam()
model.compile(loss='categorical_crossentropy', optimizer=optimizer)
print('model built')
该模型仅适用于两个LSTM层、两个Dropout层和一个密集层。我认为我的input_shape设置有问题,但我可能错了。我的模型是基于上面数据集笔记本中的一个笔记本。
为了堆叠RNN,您必须使用return_sequences=True
。从该错误可以看出,该层期望3 dimentional tensor
,但接收到2 dimentional
。在这里,您可以看到return_sequences=True
标志将输出一个3 dimentional
张量。
如果为True,则每个时间步长的连续输出的完整序列为return(形状的3D张量(batch_size,output_features((。
假设您的输入层没有问题,并且输入数据正确传递,我建议尝试以下模型。
print('Building model...')
model2 = Sequential()
model2.add(LSTM(128, input_shape=(maxlen, len(chars)),return_sequences=True))
model2.add(Dropout(0.5))
model2.add(LSTM(128, return_sequences=True))
model2.add(Dropout(0.5))
model2.add(LSTM(128))
model2.add(Dropout(0.2))
model2.add(Dense(len(chars), activation='softmax'))
# optimizer = RMSprop(lr=0.01)
optimizer = Adam()
model.compile(loss='categorical_crossentropy', optimizer=optimizer)
print('model built')