用于音乐的LSTM自动编码器 - Keras [序列到序列]

时间:2016-11-28 10:34:50

标签: machine-learning deep-learning keras recurrent-neural-network autoencoder

所以,我正在尝试为大约200首歌曲的片段(每首歌曲约3-5分钟)学习固定的矢量表示,并希望使用基于LSTM的序列到序列自动编码器。

我正在预处理音频(使用librosa),如下所示:

  1. 我首先得到的原始音频信号时间序列形状围绕(1500000,) - (2500000)每首歌曲。
  2. 然后我将每个原始时间序列切成段,并获得每首歌曲形状(512,3000) - (512,6000)的低级mel谱图矩阵。这些(512,)向量中的每一个都可以被称为“迷你歌曲”,因为它们代表歌曲的一部分。
  3. 我将所有歌曲的所有迷你歌曲垂直叠加在一起以创建训练数据(我们称之为 X )。 X的大小为(512,600000),其中第一个维度(512)是窗口大小,第二个维度(600000)是数据集中“迷你歌曲”的总数。
  4. 也就是说,X中有大约60万首迷你歌曲--X中的每一列代表一首长度为512的迷你歌曲。
  5. 这些(512,)迷你歌曲矢量中的每一个都应编码为每个迷你歌曲的(50,)矢量,即在处理结束时我们将有600000(50,)个矢量。
  6. 在更标准的术语中,我有600000个训练样本,每个样本长度为512. [认为这与图像数据集类似 - 600000张图像,每张图像长度为784,图像的分辨率为32x32。除了在我的情况下,我想将512长度的样本视为具有时间属性的序列。]
  7. 我阅读了示例here,并希望将其扩展到我的用例。我想知道timesteps图层的input_dimInput参数应该设置为什么。

    我正在设置timesteps = X.shape[0](在这种情况下为512)和input_dim = X.shape[1](即600000)。这是正确的方法吗?

    修改:添加了上述说明。

1 个答案:

答案 0 :(得分:0)

您的输入实际上是一维序列而不是二维图像。 输入张量将为(600000,512,1),您需要将input_dim设置为1,将时间步长设置为512。 形状输入不采用张量的第一个维度(例如,在您的情况下为600000)。