繁体   English   中英

添加Conv1D层时出现错误“输入0与层conv1d_48不兼容:预期的ndim = 3,找到的ndim = 2”

[英]Error 'Input 0 is incompatible with layer conv1d_48: expected ndim=3, found ndim=2' when adding Conv1D layer

我正在尝试构建以下模型:

model = Sequential()
model.add(Embedding(input_dim = num_top_words, output_dim = 64, input_length = input_length))
model.add(LSTM(100, activation = 'relu'))
model.add(Conv1D(64, kernel_size = 5, activation = 'relu'))
model.add(MaxPooling1D())
model.add(Dense(5, activation = 'softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy'])

但是运行它时出现以下错误:

Input 0 is incompatible with layer conv1d_48: expected ndim=3, found ndim=2

指出以下行存在错误:

model.add(Conv1D(64, kernel_size = 5, activation = 'relu'))

可能是什么问题?

问题在于,当前LSTM层的输出形状为(None, 100) ,但是,正如错误所暗示的,像LSTM层一样的Conv1D层希望输入3D形状(None, n_steps, n_features) 因此,解决此问题的一种方法是将return_sequences=True传递到LSTM层以获取每个时间步的输出,因此其输出将为3D:

model.add(LSTM(100, activation = 'relu', return_sequences=True))

或者,您可以将Conv1DMaxPooling1D层放在LSTM层之前(这可能比当前体系结构更好,因为Conv1D加上池化层的一种用法是减小LSTM层的输入维,从而降低计算复杂度):

model.add(Conv1D(64, kernel_size = 5, activation = 'relu'))
model.add(MaxPooling1D())
model.add(LSTM(100, activation = 'relu'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM