Я работаю над проблемой распознавания речи, работающей на Colab с использованием LSTM. Аудио файлы были преобразованы в спектрограммы и затем нормализованы. Всего имеется 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 образцов для тестирования.
Не стесняйтесь оставлять предложения по поводу других методов, каббалистического количества узлов / слоев или чего-либо подобного.