MLP для распознавания речи

#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)

Я получаю следующие ошибки:

  1. ПРЕДУПРЕЖДЕНИЕ:tensorflow:Модель была построена с формой (Нет, 32) для входного тензора(«dense_21_input:0», форма=(Нет, 32), dtype=float32), но она была вызвана на входе с несовместимой формой (Нет, 99, 32).

Когда я изменяю форму ввода на (99,32), предупреждение исчезает. Кто-нибудь может объяснить мне причину?

  1. Ошибка значения: Фигуры (Нет, 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) :/