用于语音识别的 MLP

时间:2021-05-25 08:11:12

标签: 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:模型的输入 Tensor("dense_21_input:0", shape=(None, 32), dtype=float32) 的形状为 (None, 32),但在形状不兼容的输入上被调用(无、99、32)。

当我将 input_shape 更改为 (99,32,) 时,警告消失。谁能解释一下原因?

  1. ValueError: Shapes (None, 31) 和 (None, 99, 31) 不兼容(这是我尝试计算预训练精度时的情况)

我不知道如何处理这个错误?

我期待得到一些帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

在此特定行 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) 部分与前面提到的形状不一致。