加载 Keras 模型并使用它进行预测

Posted

技术标签:

【中文标题】加载 Keras 模型并使用它进行预测【英文标题】:Loading Keras Model and making prediction with it 【发布时间】:2020-07-14 06:30:36 【问题描述】:

我制作了一个用于假新闻检测的 Keras NN 模型,我得到了 89,1 的验证准确率。我使用了 50000 个样本进行训练,10000 个样本用于测试,2000 个样本用于验证。我保存了那个模型。 现在我想加载该模型,加载我想根据该数据进行预测的新数据。

import pandas as pd

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, RobustScaler, Normalizer, MinMaxScaler
from sklearn.feature_selection import RFE
from sklearn.metrics import accuracy_score

from tensorflow.python.keras.models import Sequential, load_model
from tensorflow.python.keras.layers import Dense, Dropout, LeakyReLU, Conv2D, LSTM, Flatten

from tensorflow.python.keras import optimizers

from tensorflow.python.keras.regularizers import l2
from tensorflow.python.keras.callbacks import EarlyStopping, ModelCheckpoint

import numpy as np



my_model_1 = load_model("keras fake news acc 89.1.h5")

validation_df = pd.read_csv("validation.csv")
validation_features = validation_df.iloc[:,:-1]
validation_results = validation_df.iloc[:,-1].tolist()

scaler = StandardScaler()
validation_features = scaler.transform(validation_features) #ERROR

问题是我得到一个错误:

NotFittedError: This StandardScaler instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

如果我在我的特征上使用fit_transform,我不会收到错误,但我会得到 52% 的准确率,这太糟糕了(因为我有 89.1%)。

我该如何解决这个问题? 我是否还需要加载用于训练模型的数据,或者我可以只加载模型并传递数据以进行预测?

当我训练模型时,我使用fit_transform 用于训练数据,transform 用于测试数据。我想现在,我应该只在我的数据上使用transform,但我得到一个错误

【问题讨论】:

您还需要加载用于转换特征的scaler(在您保存好之后,就像您的模型一样)。 加载还是导入?我已经导入了我的 StandardScaler。我不知道如何加载那个缩放器 在安装后加载它,就像您对模型所做的那样:***.com/questions/41993565/…, stats.stackexchange.com/questions/392666/… 【参考方案1】:

在使用pickle 或joblib 库进行训练时保存缩放器对象。 加载此缩放器对象,然后对测试数据(或实时数据)应用变换函数。

您使用具有不同缩放比例的数据训练模型并尝试对具有不同缩放比例的数据进行预测。

【讨论】:

谢谢,我做到了,但是我的准确率很低,是52%,而我做模型的时候是89%

以上是关于加载 Keras 模型并使用它进行预测的主要内容,如果未能解决你的问题,请参考以下文章

未知初始化器:加载 Keras 模型时的 GlorotUniform

Keras 模型在保存/加载后预测 NaN

如何使用分布式 Dask 和预训练的 Keras 模型进行模型预测?

将经过训练的 HDF5 模型加载到 Rust 中以进行预测

无法从 tensorflow/keras 中的加载模型中获取梯度

将 UIImage 转换为 Keras 模型的 MLMultiArray