我正在尝试学习语音识别,因此我对初学者使用了一个简单的 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)
我收到以下错误:
当我将 input_shape 更改为 (99,32,) 时,警告消失。谁能解释一下原因?
我不知道如何处理这个错误?
我期待得到一些帮助。
谢谢!
答案 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)
部分与前面提到的形状不一致。