如何将多个特征放入 RNN 输入向量中

数据挖掘 Python 神经网络 rnn 特征构造
2022-03-10 00:38:01

我正在尝试编写一个循环神经网络 (LSTM) 以在 python 中创建音乐,并且正在考虑使用多个功能而不是仅将音符音高作为网络的输入。最初我只有音符音高,所以它通过 one-hot 编码输入到网络中。我要添加的另外两个功能是音符持续时间和音符之间的偏移量。应该如何组织输入向量,以便所有数据都通过网络馈送?

我已经尝试将所有数据组合成一个长向量,其中所有 3 个特征都进行一次热编码然后连接,但这导致输出变为“NaN”。任何帮助,将不胜感激。

链接我的代码要点:

https://gist.github.com/treutm/1b1f49e3d0a9de53cd67c136292f329f

1个回答

正如您所做的那样,将多个特征输入到 LSTM(或任何 RNN)的常用方法是将它们连接到一个向量中。我怀疑你的 NaN 与代码中的另一个问题有关,我建议你调试它,看看它何时以及为什么会发生。

组合多个特征的另一种方法是对每个特征使用嵌入并通过连接将它们组合起来。例如,对于音符音高,每个音符都有一个嵌入,对于音符持续时间,相同的等等。RNN 的输入将是它的串联。

第三种选择是对所有可能的嵌入组合进行嵌入。这将是每个音符音高、音符持续时间和偏移量的三元组的嵌入。这种表示也可以很强大。

我的建议是你从最容易实现的开始,如果结果在模型性能方面不令人满意,请考虑下一个。