人们谈论LSTM预测下一个时间步。这意味着它应该识别一个模式来做出预测。假设在学习阶段它经常看到1 2 3的序列。所以当它看到1 2时,它会预测3。对吗?
但如果我不想预测数字怎么办?如果我需要LSTM识别一个无法简单量化的模式呢?
这里有一个例子。波浪。你是一个LSTM,你在海滩上(不错!)。你在数波浪。你的输入是三维向量。每个观察值是{高度,速度,时间}(时间是自上次观察以来的秒数计数 – 这很重要,因为波浪的间隔是可变的)。但你在离海滩100米的地方看到波浪。你站在离水边10米的地方。
我希望你能识别出波浪模式,这些模式会导致你的脚被波浪序列弄湿。
所以这个问题有两个不同的挑战。
一个是“迫近性” – 由于波浪的速度不同,无法知道波浪到达你的脚需要多长时间。不同的模式会在不同的时间做到这一点。因此,从LSTM识别出好的模式的时间步M到波浪到达你的脚的时间步N之间的距离,每个好的模式都会有所不同。
第二个是输出(假设我想要0或1)不在输入序列中。它不是预测下一个波浪,而是预测0/1。
谁能建议这样一个LSTM的高层次架构?我如何编程“脚湿”?在批量机器学习中,这将被称为监督学习,我会用“脚湿”标签标记某些数据点。
这里还有一个考虑。也许它应该是堆叠的。假设有3个LSTM。因为一些波浪对“脚湿”事件的贡献显著,而有些则不然。我在想,可能我需要一台机器学习小模式,另外两台机器学习模式的模式,第三台机器实际上从中预测“脚湿”。
有什么想法吗?
回答:
查看https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py,了解使用LSTM进行分类任务的示例。最基本的架构只是一个LSTM层,后跟一个输出节点:
model = Sequential()model.add(Embedding(max_features, 128))model.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2))model.add(Dense(1, activation='sigmoid'))