【发布时间】:2019-09-15 12:04:47
【问题描述】:
我正在研究使用 LSTM 在 Colab 上运行的语音识别问题。音频文件被转换为频谱图,然后标准化。总共有 6840 个谱图,每个谱图的形状为 (288, 864, 4)。 我已经尝试了一些使用 RNN 和 CNN 的示例并且它们有效,但是当我尝试使用 LSTM 的示例时,我会遇到形状错误,每次要么比预期的维度多一个或少一个。以下是其中一些案例:
rnn = keras.Sequential()
rnn.add(keras.layers.SimpleRNN(500, input_shape = (864, 4)))
rnn.add(keras.layers.LSTM(500, return_sequences = True))
rnn.add(keras.layers.Dropout(0.2))
rnn.add(keras.layers.LSTM(500, return_sequences = True))
rnn.add(keras.layers.Dropout(0.2))
rnn.add(keras.layers.LSTM(500, return_sequences = True))
rnn.add(keras.layers.Dropout(0.2))
rnn.add(keras.layers.Dense(212, activation = 'softmax'))
rnn.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy',metrics = ['accuracy'])
rnn.fit(X_train, y_train, epochs = 5, validation_data=(X_test, y_test))
scores = rnn.evaluate(X_test, y_test, verbose=1)
print('Test loss:', scores[0])
print('Test accuracy:', '%.2f' % (scores[1] * 100), '%')
第一个 LSTM 层出现以下错误:ValueError: Input 0 of layer lstm_54 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, 500]
如果我删除 SimpleRNN 行并将输入直接提供给第一个 LSTM,如下所示
rnn.add(keras.layers.LSTM(500, return_sequences = True, input_shape = (288, 864, 4)))
我得到:ValueError: Input 0 of layer lstm_56 is incompatible with the layer: expected ndim=3, found ndim=4. Full shape received: [None, 288, 864, 4]
我尝试将图像重塑为 (4, 288 * 864) 并在尝试使用 RNN 层时遇到相同的错误,但仅使用 LSTM 我得到了InvalidArgumentError: Incompatible shapes: [32] vs. [32,4]。
不过,不知道 32 是从哪里来的。
最后一件事,不是真正的问题,而是更多的请求,是否有任何库可以以简单的方式调整图像大小? 288x864 对 Colab 来说太大了,所以我最终必须这样做才能加载所有 6840 图像并将其提供给神经网络。现在我只是使用 100 个样本进行测试。
请随时留下有关其他方法、节点/层数或类似内容的建议。
【问题讨论】:
标签: python-3.x tensorflow keras google-colaboratory