Tensorflow Keras报告的准确度不';t与model.predict()对应

Tensorflow Keras报告的准确度不';t与model.predict()对应,tensorflow,machine-learning,keras,deep-learning,Tensorflow,Machine Learning,Keras,Deep Learning,我的代码的相关部分: model.compile(loss='binary_crossentropy', optimizer=RMSprop(0.0005), metrics=['accuracy']) model.fit(np.stack(data_train['spectrogram']), np.stack(data_train['label']), bat

我的代码的相关部分:

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)))
模型架构:

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')
列车pred的准确率约为55%,但如上所示,上一历元的报告准确率为0.7425

我做错什么了吗?还是有什么解释


如果有帮助的话,我很乐意发布更多的代码。

年代中显示的准确性是您提供的训练数据集上模型的准确性。
model.predict
显示验证数据集的准确性。0.7的准确度在训练数据集上0.55的准确度在测试/验证数据集上你的74%在训练集上,这是你自己在训练时执行算法的一个指标,你永远不要把它当作参考

您应该始终查看测试集,这才是真正重要的值

此外,您的准确度应始终如下所示(至少是样式):

e、 g.训练集的准确性始终在增长,测试集遵循相同的趋势,但低于训练曲线


当训练准确度/损失较高,而开发/测试准确度/损失较低时,它明显发出一个过度拟合的信号。如果绘制训练和测试数据的精度图,可能与下图类似:

在绘图的某个点上,训练精度会降低,但测试精度不会降低。可以做些什么

  • 早停
  • 正规化
  • 使用更多数据进行训练
  • 简化模型(减少参数)

  • 线索:根据您的代码,您有两个LSTM和466培训示例。LSTM模型是一个相对强大的网络,很容易在数据上过度拟合。减少LSTM的隐藏层大小或删除其中一个可能是避免过度拟合的良好起点。

    有时55%的精度太高。解释一下问题出在哪里,线索是什么,你的猜测是什么。问题是Keras说训练准确度是0.7425,而model.predict显示55%。你需要告诉我们你的模型代码和编译调用,任何答案都是有意义的。我已经添加了模型和编译代码。你必须提供上下文,输入是什么?您试图预测什么?如问题中所述,我是
    model.predict
    ing火车数据集本身。因此,精度应该是相同的。