【发布时间】:2018-06-24 21:18:53
【问题描述】:
我正在尝试按顺序预测多维值,例如
[[0, 0, 2], [1, 0, 3], [2, 3, 4], [3, 2, 5], [4, 0, 6], [5, 0, 7] ... ] 并希望 LSTM 捕获每个 [x, y, z] 维度。
当我尝试在下面的模型上运行model.fit() 时,我得到标题中的错误,
ValueError: Error when checking target: expected time_distributed_19 to have 3 dimensions, but got array with shape (1824, 3)
我知道输出层应该具有三个维度,但我在思考如何需要 LSTM 来处理我的 n 维值序列时感到困惑。
这是我的模型。请注意,如果我按照某些解决方案的建议取消注释 Flatten() 行,我会在 model.compile() 上得到一个不起眼的 AssertionError
# X shape: (1824, 256, 3)
# Y shape: (1824, 3)
model = Sequential()
model.add(LSTM(units=128, input_shape=(X.shape[1], X.shape[2]), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=128, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=128, return_sequences=True))
model.add(Dropout(0.2))
# model.add(Flatten())
model.add(TimeDistributed(Dense(Y.shape[1], activation='softmax')))
model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer='adam')
这是模型摘要:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_145 (LSTM) (None, 256, 128) 67584
_________________________________________________________________
dropout_140 (Dropout) (None, 256, 128) 0
_________________________________________________________________
lstm_146 (LSTM) (None, 256, 128) 131584
_________________________________________________________________
dropout_141 (Dropout) (None, 256, 128) 0
_________________________________________________________________
time_distributed_19 (TimeDis (None, 256, 3) 387
=================================================================
Total params: 199,555
Trainable params: 199,555
Non-trainable params: 0
_________________________________________________________________
None
此模型在我添加 TimeDistributed() 包装器之前运行(尽管我必须从最后一个隐藏层中删除 return_sequences=True 才能使其工作),但我添加了 TimeDistributed() 因为我不认为单个变量我的 3 维特征值被捕获。
非常感谢任何见解,谢谢。
更新
感谢nuric 对我最初的问题的快速回答,我确认我之前的做法是“正确的方式”,而我的困惑源于我得到的预测。给定一个来自 X 的序列,我得到一个像这样的 3D 向量:[9.915069e-01 1.084390e-04 8.384804e-03](它总是关于 [1, 0, 0])
在我之前的 LSTM 模型中,这个预测向量的最大值对应于我对字母/单词的 one-hot 编码中的索引,但这里我想要的是对下一个 3D 向量的 x、y 和 z 值的预测在序列中。
【问题讨论】:
标签: python tensorflow keras lstm