#python #tensorflow #speech-recognition #mlp
Вопрос:
Я пытаюсь научиться распознаванию речи и поэтому для начала использую простой MLP.
Ниже приведен код:
#Simple MLP model
num_labels = Y.shape[1]
filter_size = 2
# Construct model
model = Sequential()
model.add(Dense(256, input_shape=(32,)))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(num_labels))
model.add(Activation('softmax'))
# Compile the model
model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer='adam')
# Display model architecture summary
model.summary()
# Calculate pre-training accuracy
score = model.evaluate(X_test, Y_test, verbose=2)
accuracy = 100*score[1]
print("Pre-training accuracy: %.4f%%" % accuracy)
Я использую MFCC для извлечения функций и MLB для однократного кодирования.
Форма X_train,X_val,X_test,Y_train,Y_val и Y_test выглядит следующим образом: (54296, 99, 32) (6787, 99, 32) (6788, 99, 32) (54296, 31) (6787, 31) (6788, 31)
Я получаю следующие ошибки:
- ПРЕДУПРЕЖДЕНИЕ:tensorflow:Модель была построена с формой (Нет, 32) для входного тензора(«dense_21_input:0», форма=(Нет, 32), dtype=float32), но она была вызвана на входе с несовместимой формой (Нет, 99, 32).
Когда я изменяю форму ввода на (99,32), предупреждение исчезает. Кто-нибудь может объяснить мне причину?
- Ошибка значения: Фигуры (Нет, 31) и (Нет, 99, 31) несовместимы (это когда я пытаюсь рассчитать точность предварительной подготовки)
Я понятия не имею, как справиться с этой ошибкой?
Я с нетерпением жду получения некоторой помощи.
Спасибо!
Ответ №1:
В этой конкретной строке model.add(Dense(256, input_shape=(32,)))
вы определяете входную форму (32), что означает , что форма будет иметь форму (batch_size, 32)
, которая на самом деле не соответствует действительности, потому что ваши входные данные имеют форму (batch_size, 99, 32)
, поэтому вам нужна такая спецификация: input_shape = (99, 32, )
Что касается части точности предварительной подготовки, я не совсем уверен , потому что вы упомянули, что форма X_test должна быть (6788, 99, 32)
, последнее измерение 32, в то время как ваш Y_test имеет форму (6788, 31)
, последнее измерение 31.
Это не совсем складывается, ошибка в вашем коде говорит Shapes (None, 31) and (None, 99, 31)
, (None, 99, 31)
что часть несовместима с формой, упомянутой ранее.
Комментарии:
1. Спасибо, Аюш! Даже я не уверен в том, почему возникает ошибка несогласованной формы?
2. Трудно сказать, потому что вы утверждали, что входная форма (99,31), в то время как ваш вывод говорит, что это (99,32) :/