python - 嵌入层的意外输出
问题描述
我已经尝试在 Keras 中实现一个 LSTM 几个小时(使用带有嵌入层、两个 LSTM 层和一个密集层的顺序模型),但我最终得到了不同的错误消息。
据我所知,问题在于嵌入层的输出有二维而不是三个,因为我ValueError: Input 0 is incompatible with layer lstm_2: expected ndim=3, found ndim=2
在添加第二个 LSTM 层时得到这个值错误(),assert len(input_shape) >= 3 AssertionError
当我删除添加的行时得到错误第二个 LSTM 层(这意味着密集层有同样的问题)。
这些错误发生在我调用模型的“训练”方法之前。
我的代码在这里。
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.layers import LSTM
from keras.layers import Embedding
from keras.layers import TimeDistributed
from keras.preprocessing import text
from keras.preprocessing.sequence import pad_sequences
# The data in X was preprocessed using Keras' built in pad_sequences.
# Before preprocessing, it consisted of plain lists of integers (which
# were just integers wit a one-to-one map to plain words as strings)
X = pad_sequences(X)
model = Sequential()
model.add(Embedding(batch_size=32, input_dim=len(filtered_vocabulary)+1, output_dim=256, input_length=38))
model.add(LSTM(128))
model.add(LSTM(128)) # error occurs in this line
model.add(TimeDistributed(Dense(len(filtered_vocabulary)+1, activation="softmax")))
model.compile(optimizer = "rmsprop", loss="categorical_crossentropy", metrics=["accuracy"])
model.fit(X, X, epochs=60, batch_size=32)
如果你们中的任何人能帮助我解决这个问题,我会很高兴。
解决方案
发生错误是因为第一个 LSTM 层只返回最后一个输出,因为您没有return_sequences=True
在 LSTM 层中指定。这看起来像一个多输出设置,因此您需要在每个时间步使用两个层的该参数返回 LSTM 输出。
只是要清楚,没有return_sequences=True
形状是(None, 128)
; 与形状是(None, 38, 128)
。
推荐阅读
- azure - 如何使用 Azure 动态清单以及有条件的键控组执行 ansible-playbook
- r - 从 pdf 到闪亮,从闪亮到 pdf
- c# - 将数据库连接到 Xamarin
- angular - 如何将“2019 年 5 月 6 日星期一 00:00:00 GMT+0530(印度标准时间)”日期格式转换为 angular7 和 angular 材料中的 mm/dd/yyyy
- reactjs - 创建反应应用程序错误 - 找不到名称“描述”
- arrays - 在 Arrayformula 中使用 Weekday 的 Google 表格
- javascript - 使用 Javascript 在表格内创建文本框
- enums - C++/CLI:循环非连续枚举
- python - wxpython:设置应用程序颜色(默认属性)
- asp.net-mvc - 单击“在浏览器中查看”时无法打开谷歌浏览器