我正在开展一个项目,我们使用编译的 keras ANN 模型根据收到的传感器数据对不同的位置进行分类。这些数据不断地输入到模型中,以便模型通过在后台收集数据的守护线程进行预测。我们遇到一个问题,即使输入小数据集,model.predict() 也需要长达 2 秒才能完成。数据点是每个包含 38 个浮点数的数组。预测时间似乎不受提供的行数(最多一定数量)的影响。我们尝试过只提供一排,甚至最多提供数百排。经过的时间保持在 2 秒左右。即使对于较大的数据集,这个时间消耗不是异常高吗?
如果有帮助:我们的程序使用多线程能够从传感器收集数据并重组它们,以便它们适合模型的预测方法。两个守护线程在后台运行,收集和重组数据,而主线程则主动从已结构化数据的队列中挑选数据并根据这些数据进行分类。这是我们根据收集的数据进行分类的代码:
values = []
rows = 0
while rows < 20:
val = pred_queue.shift()
if val != None:
values.append(val)
rows += 1
rows = 0
values = np.squeeze(values)
start_time = time.perf_counter()
predictions = model.predict(values)
elapsed_time = round(time.perf_counter() - start_time, 2)
print("Predict time: ", elapsed_time)
for i in range(len(predictions)):
print(predictions[i].argmax())
#print(f"Predicted {classification_res} in {elapsed_time}s!")
Run Code Online (Sandbox Code Playgroud)
代码的一些说明:
shift() 方法返回 pred_queue() 中的第一个条目。这将是一个包含 38 个浮点数的数组,也可能是 None,具体取决于队列是否为空。
是什么可能使这些预测如此缓慢?
编辑
预测时间混乱的原因是我们在编译之前对某些数据运行了相同的模型。这些数据点是从 csv 文件中收集的,放入 pandas 数据框中,最后传递给预测方法。这些数据并未实时传输,但数据集要大得多,大约有 9000 …