如何加速 Keras model.predict?

cts*_*tat 2 python keras data-science tensorflow

我训练了一个 LSTM 模型,并尝试对所有测试观察结果进行预测。然而,keras 需要很长时间model.predict才能计算所有预测。有没有办法加快这个过程?假设每个预测有两个特征(x1 和 x2)。每个特征的长度(x1 & x2)都是33。如[32,1,17,.......,0]。我需要进行 100 万次预测。我的代码是

predictions = np.argmax(make.predict([x1, x2]), axis = -1)  
Run Code Online (Sandbox Code Playgroud)

有什么想法可以加快速度吗?非常感谢

Nag*_*ran 5

实际上,Keras 模型是执行、训练、再训练、微调和总结以及模型明智更改的主要架构,在进行预测和部署时,我们需要使用frozen inference graph of keras model.

我们还应该Frozen graph optimization使用TensorRTOpenVINO和许多其他模型优化技术。

在这里,我添加了从 Keras 模型转换图形的代码片段

冻结图表的链接

将 Keras 模型转换为 TensorFlow 冻结图

从 TensorFlow 2.x Frozen Graph 保存、加载和推理

看起来可能很长,但它的实际方法

#冻结图

# Convert Keras model to ConcreteFunction
full_model = tf.function(lambda x: model(x))
full_model = full_model.get_concrete_function(
    tf.TensorSpec(model.inputs[0].shape, model.inputs[0].dtype))

# Get frozen ConcreteFunction
frozen_func = convert_variables_to_constants_v2(full_model)
frozen_func.graph.as_graph_def()


# Save frozen graph from frozen ConcreteFunction to hard drive
tf.io.write_graph(graph_or_graph_def=frozen_func.graph,
                  logdir="./frozen_models",
                  name="frozen_graph.pb",
                  as_text=False)
Run Code Online (Sandbox Code Playgroud)

#加载冻结图

   # Load frozen graph using TensorFlow 1.x functions
with tf.io.gfile.GFile("./frozen_models/frozen_graph.pb", "rb") as f:
    graph_def = tf.compat.v1.GraphDef()
    loaded = graph_def.ParseFromString(f.read())

# Wrap frozen graph to ConcreteFunctions
frozen_func = wrap_frozen_graph(graph_def=graph_def,
                                inputs=["x:0"],
                                outputs=["Identity:0"],
                                print_graph=True)
Run Code Online (Sandbox Code Playgroud)