Python 培训及;验证LSTM问题:精度和;召回问题

Python 培训及;验证LSTM问题:精度和;召回问题,python,tensorflow,keras,precision,precision-recall,Python,Tensorflow,Keras,Precision,Precision Recall,我开发了一个LSTM编码器-解码器模型,以便根据跳跃-扩散模型(本质上是二进制分类问题)对价格变动进行分类 我的模型在培训和验证之间分成75/25 我的问题是,在应用了SMOTE等类不平衡技术后,我的模型在训练和验证中的预测精度都非常高(可能仍然过拟合)。但是,在精确度、召回率和f1成绩方面,我的训练模型再次表现良好,但在验证方面,我的精确度和召回率显著下降。这显然会导致f1在验证方面的分数较低 有人知道为什么验证准确率会很高,但精确度和召回率都显著下降了吗?这是我的模型在验证方面计算精度和召回

我开发了一个LSTM编码器-解码器模型,以便根据跳跃-扩散模型(本质上是二进制分类问题)对价格变动进行分类

我的模型在培训和验证之间分成75/25

我的问题是,在应用了SMOTE等类不平衡技术后,我的模型在训练和验证中的预测精度都非常高(可能仍然过拟合)。但是,在精确度、召回率和f1成绩方面,我的训练模型再次表现良好,但在验证方面,我的精确度和召回率显著下降。这显然会导致f1在验证方面的分数较低

有人知道为什么验证准确率会很高,但精确度和召回率都显著下降了吗?这是我的模型在验证方面计算精度和召回率的方式的问题,还是我的模型拟合过度导致验证结果降低

查看下图,了解模型结果的摘要,如果需要,我还可以提供笔记本

编辑:包括相关代码

#%pip install keras-metrics

# Importing required packages
import keras_metrics as km

# LSTM Workings_Autoencoder Model

ac_model_1b = Sequential()
ac_model_1b.add(Bidirectional(LSTM(units=200, return_sequences = True,
                               input_shape = (n_timesteps, n_features), 
                                kernel_initializer='glorot_normal')))
ac_model_1b.add(LSTM(100))
ac_model_1b.add(Dropout(0.2))

ac_model_1b.add(RepeatVector(n_timesteps))

ac_model_1b.add(LSTM(100, return_sequences = True))
ac_model_1b.add(Dropout(0.2))
ac_model_1b.add(LSTM(200, return_sequences = True))
ac_model_1b.add(TimeDistributed(Dense(1, activation='sigmoid')))

ac_model_1b.compile(loss='binary_crossentropy', optimizer='Adamax', 
                 metrics=['accuracy', km.binary_precision(), km.binary_recall()])

results_ac_model_1b = ac_model_1b.fit(x_train, y_train, epochs=100, batch_size=32,
                        shuffle=True, validation_data=(x_valid, y_valid))

print(ac_model_1b.summary())

ac_model_1b.save('lstm_model_adamax.h5')

欢迎任何建议


谢谢。

如果您能提供您的混淆矩阵,可能会更好。

但是,这似乎是错误的计算

数学上,**(准确度+召回率>=精度)

编辑: 这是我的名字

在您的情况下,31+33<97


我建议你使用。如果您能在问题中打印出报告,我将不胜感激。

看起来可能不是这样,但事实是,我用来计算精度和召回率的包是不正确的。嗯,不,我现在不确定,因为这些是标准函数,而且当前的keras内置了prec和召回支持,
度量=[keras.metrics.Precision(),keras.metrics.Recall()])
,类似的问题也被问到了,但没有得到回答。也许评论部分可以提供帮助。我的问题是,你能用``metrics=[keras.metrics.Precision(),keras.metrics.Recall()]`代替keras\u metrics并得到结果吗?你试过
ac\u model\u 1b.compile吗(loss='binary\u crossentropy',optimizer='Adamax',metrics='Accurance',keras.metrics.Precision(),keras.metrics.Recall())
?您也在使用tf.keras或keras吗?您能打印整个错误吗?
“ValueError:形状(无,2,1)和(无,1,1)不兼容”
我想知道这个错误是从哪里来的。让我们来看看。