我代码的相关部分:
模型架构:
Sequential(
layers=[
BatchNormalization(input_shape=input_shape),
LSTM(lstm_1, return_sequences=True, dropout=dropout_1),
BatchNormalization(),
LSTM(lstm_2, dropout=dropout_2),
Dense(1, activation='sigmoid')
]
)
编译并拟合调用:
model.compile(loss='binary_crossentropy',
optimizer=RMSprop(0.0005),
metrics=['accuracy'])
model.fit(np.stack(data_train['spectrogram']), np.stack(data_train['label']),
batch_size=512,
epochs=50,
validation_data=(np.stack(data_test['spectrogram']), np.stack(data_test['label'].values)))
训练时
Epoch 50/50
466/466 [==============================] - 4s 8ms/step - loss: 0.5264 - acc: 0.7425 - val_loss: 0.8254 - val_acc: 0.5339
但是当我这样做
train_preds = np.round(model.predict(np.stack(data_train['spectrogram']))).astype('int32')
train_preds的准确度约为55%,但是,如上所示,在最后一个时期报告的准确度为0.7425
我做错什么了吗?还是有一些解释?
如果有帮助,我很乐意发布更多代码。
答案 0 :(得分:1)
时期中显示的准确性是您提供的训练数据集上模型的准确性。 model.predict
显示验证数据集的准确性。 0.7准确性在训练数据集上,而 0.55准确性在测试/验证数据集上。
答案 1 :(得分:0)
您的74%位于训练集上,这表明自己在训练过程中正在执行算法,永远不要把它当作参考。
您应该始终查看您的测试集,这才是真正的价值所在。
更重要的是,您的准确度应始终如下所示(至少是样式):
例如训练集的准确性一直在增长,而测试集遵循相同的趋势但低于训练曲线。
答案 2 :(得分:0)