如何在 Keras 中仅获得一个实例的预测?

数据挖掘 神经网络 喀拉斯
2021-09-16 00:23:08

当我请求 Keras 将带有拟合模型的预测应用于没有标签的新数据集时,如下所示:

model1.predict_classes(X_test)

它工作正常。但是当我尝试只对一行进行预测时,它失败了:

model1.predict_classes(X_test[10])

Exception: Error when checking : expected dense_input_6 to have shape (None, 784) but got array with shape (784, 1)

我想知道为什么?

4个回答

你可以做:

q = model.predict( np.array( [single_x_test,] )  )

predict_classes期待一个二维数组 shape (num_instances, features),就像X_test是。但是像 in 那样索引单个实例会X_test[10]返回一个 shape 的一维数组(features,)

要重新添加额外的轴,您可以使用、 或,或者一开始就不要删除它(例如,使用)。np.expand_dims(X_test[10], axis=0)X_test[10][np.newaxis,:]X_test[10:11]

目前(Keras v2.0.8)在批量训练后需要更多的努力来获得单行的预测。

基本上,batch_size在训练时是固定的,并且在预测时必须相同。

现在的解决方法是从经过训练的模型中获取权重,并将其用作您刚刚创建的新模型中的权重,该模型的 abatch_size为 1。

快速代码是

model = create_model(batch_size=64)
mode.fit(X, y)
weights = model.get_weights()
single_item_model = create_model(batch_size=1)
single_item_model.set_weights(weights)
single_item_model.compile(compile_params)

是一篇更深入的博客文章。

我过去曾使用这种方法在预测时拥有多个模型——一个对大批量进行预测,一个对小批量进行预测,一个对单个项目进行预测。由于批量预测效率更高,这使我们可以灵活地接受任意数量的预测行(不仅仅是可以被 整除的数字batch_size),同时仍然可以非常快速地获得预测。

这将是如何预测一个元素,这次是数字 17。

model.predict_classes(X_test[17:18])
其它你可能感兴趣的问题