如何测试用Keras创建的模型

时间:2019-04-26 23:56:44

标签: python keras text-classification

我正在与Keras一起解决文本分类问题。但 我尝试测试创建的模型,但无法使用TfidfVectorizer测试该类。

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()方法应该在不能使用之前出现。

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

1 个答案:

答案 0 :(得分:0)

您需要使用完全适合的TfIdfVectorizer对象对测试数据进行编码,该对象用于转换原始训练数据,这要追溯到最初训练模型时。如果您在测试数据中使用其他TfidfVectorizer,则编码(包括vocab长度)将完全不同,并且将无法正常工作。 vocab长度的这种差异是您所看到的错误的直接原因。但是,即使您确实偶然获得了尺寸匹配,它仍然无法正常工作,因为模型经过了训练的编码,可将“ cat”映射为42,或其他任何值。使用将“ cat”映射到13之类的编码进行测试。基本上,您会把它弄乱了。真的没有别的选择,只能去获得原始的TfidfVectorizer,或者至少使TfidfVectorizer适合具有完全相同配置的完全相同的文档。如果这不可能,那么您只需要训练一个新模型,这次就记得也要保存TfidfVectorizer。

通常,在初次训练过程中,拟合的预处理过程会通过pickle.dump()保存到一个pickle文件中,并加载pickle.load()进行测试和生产,类似于您对model_architecture.json和{ {1}}。将所有内容放到sklearn pipeline中也很方便,因此您只需要腌制一个对象,但是我不确定Keras模型如何与之协同工作。