如何测试我用 Keras 创建的模型

How can I test the model I created with Keras

我正在处理 Keras 的文本 class化问题。但 我试图测试我创建的模型,但我无法使用 TfidfVectorizer 来测试 class.

with open('model_architecture.json', 'r') as f:
model = model_from_json(f.read())

model.load_weights('model_weights.h5')

安装模型后我准备了一个测试列表来使用。

test_data=["sentence1","sentence2","sentence3"]

目前没问题

但是..

tf=TfidfVectorizer(binary=True)
train=tf.fit_transform(test_data)
test=tf.transform(test_data)
print(model.predict_classes(test))

ValueError: Error when checking input: expected dense_1_input to have shape (11103,) but got array with shape (92,)

我收到这样的错误

我也试过了

tf=TfidfVectorizer(binary=True)
test=tf.transform(test_data)

sklearn.exceptions.NotFittedError: TfidfVectorizer - Vocabulary wasn't fitted.

但是我收到了这样的错误,我了解到fit()方法应该在这之前就来了,不能用。

但我仍然无法测试我正在训练的模型

您需要使用与您拟合并用于转换原始训练数据的完全相同的 TfIdfVectorizer 对象对测试数据进行编码,这可以追溯到您最初训练模型时。如果您将不同的 TfidfVectorizer 拟合到您的测试数据,那么编码(包括词汇长度)将完全不同并且它将不起作用。词汇长度的这种差异是您所看到的错误的近因。然而,即使你确实得到了纯粹偶然的尺寸匹配,它仍然不会起作用,因为模型是 训练的 使用映射 "cat" 到 42 的编码,或其他,当您使用将 "cat" 映射到 13 或其他内容的编码 测试 时。你基本上是在喂它乱七八糟的废话。除了获取原始的 TfidfVectorizer 之外,别无选择,或者至少将 TfidfVectorizer 安装到具有完全相同配置的完全相同的文档中。如果这不可能,那么您只需要训练一个新模型,这次记得也保存 TfidfVectorizer。

通常在初始训练期间通过 pickle.dump() 将拟合预处理保存到 pickle 文件中,并使用 pickle.load() 加载以进行测试和生产,类似于您为 model_architecture.json 所做的和 model_weights.hd5。将所有东西放在一个 sklearn pipeline 中也很方便,这样你只需要 pickle 一个对象,但我不确定如何与 Keras 模型一起工作。