所以,我正在尝试学习大约 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 长度的样本视为具有时间属性的序列。
我在这里阅读了示例,并希望为我的用例扩展它。我想知道应该将Input
图层的timesteps
和input_dim
参数设置为什么。
我正在设置timesteps = X.shape[0]
(即本例中的 512)和input_dim = X.shape[1]
(即 600000)。这是正确的方法吗?
编辑:在上面添加了说明。
您的输入实际上是 1D 序列而不是 2D 图像。 输入张量将为 (600000, 512, 1),您需要将input_dim设置为 1,将时间步长设置为 512。 形状输入不采用张量的第一维(即在您的例子中为 600000)。