Keras建模-频谱到分类序列

时间:2019-03-01 10:41:04

标签: python tensorflow keras seq2seq

我尝试在keras中建立一个模型,该模型既提供序列又提供序列。我之前建立了几个模型,但是它们都没有动态输入长度和输出长度。它用于识别声音(汽车,鸟,声音)。我的问题是,我不知道如何构建具有动态输入长度和动态输出长度的keras模型。 输入长度和输出长度不应该相关,顺序很重要!

示例

为了更好地理解这一点,我有一个非常基本的示例

x_train 是wav文件的频谱图(动态长度!)示例,具有28个样本的频率分辨率:

Dataset A: (300,28) --> 300 samples spectrogram of voice, bird and car at the end
Dataset B: (200,28) --> 200 samples spectrogram of a car in beginning and at the end
Dataset C: (333,28) --> 333 samples spectrogram of a car in the first seconds and some voice after the car

y_train 是一系列热编码的标签。每个标签都是汽车,声音或鸟。如果频谱图在最初的2秒钟内有一辆汽车,在最后几秒钟内有声音,则标签的输出也应以相同的顺序排列。示例:

Dataset A: [[0,0,1],[0,1,0],[1,0,0]] = Recognized in order: Voice, Bird, Car
Dataset B: [[1,0,0],[1,0,0]] = Recognized in order: Car, Car
Dataset C: [[1,0,0],[0,0,1]] = Recognized in order: Car, Voice

我到目前为止有什么

在一开始,我一直在寻找类似的例子。我只发现了具有固定序列长度或没有动态输出列表的示例。然后我发现DeepSpeech by Mozilla (Githublink),它基本上是用于语音识别的Tensorflow模型。它正在与频谱图的时间嵌入CNN和六个隐藏层协同工作。最后,它能够检测单词。详细信息:DeepSpeech research paper

问题是,它是用Tensorflow(我只知道keras)编写的,即使是用源代码编写的,我也无法理解如何吐出除输入序列长度以外的其他序列长度。

当前模型

我当前的模型如下:

model = Sequential()
model.add(LSTM(200, return_sequences=True, input_shape=(None,28)))
model.add(LSTM(3, return_sequences=True))

如您所见,它只有两个LSTM。第一个单元格的input_shape =(None,28)表示输入的全部动态长度。问题是,如果我输入(300,28),则输出形状会自动(300,3)。但是y_train_label例如(3,3)。意味着我得到以下错误:

InvalidArgumentError: Incompatible shapes: [1,3,3] vs. [1,300,3]
     [[{{node loss_10/lstm_29_loss/mul}} = Mul[T=DT_FLOAT, _class=["loc:@training_10/Adam/gradients/loss_10/lstm_29_loss/mul_grad/Reshape_1"], _device="/job:localhost/replica:0/task:0/device:GPU:0"](_arg_lstm_29_target_0_1/_741, loss_10/lstm_29_loss/Log)]]
     [[{{node loss_10/mul/_765}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_3107_loss_10/mul", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

我在做什么错?我做错了吗?

0 个答案:

没有答案