如何测试我用 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 模型一起工作。
我正在处理 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 模型一起工作。