因此,我正在尝试为大约 200 首歌曲(每首歌曲约 3-5 分钟)的片段学习固定向量表示,并希望为此使用基于 LSTM 的序列到序列自动编码器。
我正在预处理音频(使用 librosa),如下所示:
- 我首先只是得到每首歌曲大约 (1500000,) - (2500000,) 形状的原始音频信号时间序列。
- 然后,我将每个原始时间序列切成片段,并获得每首歌曲形状 (512, 3000) - (512, 6000) 的较低级别的 mel 频谱图矩阵。这些 (512,) 向量中的每一个都可以称为“迷你歌曲”,因为它们代表歌曲的各个部分。
- 我将所有歌曲的所有这些迷你歌曲垂直堆叠在一起以创建训练数据(我们称之为X)。X 的大小是 (512, 600000),其中第一个维度 (512) 是窗口大小,第二个维度 (600000) 是数据集中“迷你歌曲”的总数。
- 也就是说,X 中大约有 600000 首迷你歌——X 中的每一列代表一首长度为 (512,) 的迷你歌。
- 这些 (512,) 个迷你歌曲向量中的每一个都应该被编码为每个迷你歌曲的 (50,) 个向量,即在过程结束时我们将有 600000 (50,) 个向量。
- 用更标准的术语来说,我有 600000 个训练样本,每个长度为 512。[认为这类似于图像数据集 - 600000 个图像,每个长度为 784,其中图像的分辨率为 32x32。除了在我的情况下,我想将 512 长度的样本视为具有时间属性的序列。]
我在这里阅读了这个例子,并希望为我的用例扩展它。我想知道应该将图层的timesteps
和input_dim
参数设置为什么。Input
我正在设置timesteps = X.shape[0]
(即在这种情况下为 512)和input_dim = X.shape[1]
(即 600000)。这是正确的方法吗?
编辑:在上面添加了说明。