我正在使用LSTM神经网络构建一个生成音乐模型,但我偶然发现了一个与嵌入层有关的问题,该层需要2D输入。
这个想法是基于任意数量的先前时间步长(在本例中为75),在给定的时间步长上预测单个乐器应启用哪些音符。标准RNN素材。
标签的形状(y)是N个长度为4的数字的列表,表示此时间步上的活动音符。示例最终形状=(300,4)
数据(x)的形状是2D数组的N个长度列表,其中2D数组的形状为(75,4),指示导致当前标签(1、4)的前75个时间步长。示例最终形状=(300,75,4)
这是导致问题的代码部分:
model = Sequential()
# num simultaneous notes = 4, sequence length = 75
model.add(Embedding(numTokens, params["num_simultaneous_notes"], input_shape=(params["sequence_length"], )))
model.add(
CuDNNLSTM(
units=512, return_sequences = True
# input_shape=(params["sequence_length"], params["num_simultaneous_notes"]),
)
)
model.add(Dropout(0.4))
这是我得到的错误:
ValueError: Input 0 is incompatible with layer FirstLSTM: expected ndim=3, found ndim=4
我的主要问题是:是否可以将3D输入提供给嵌入层,还是必须先减小数据的尺寸,然后才能将其处理为单词向量?