Python如何创建可更新的图?

时间:2018-11-14 13:58:05

标签: python python-3.x algorithm user-interface plot

我不确定这是正确的问题还是措辞,请随时提出建议!

现在,我的问题是这样的:假设我们有一种算法,可以长期运行,例如训练像神经网络这样的机器学习模型,那么代码看起来像这样:

for training_iteration in range(training_iterations_num):
    model.train()

现在,我想在每次评估后绘制训练结果,因此代码在理论上应该像这样:

for training_iteration in range(training_iterations_num):
    model.train()
    score = model.evaluate()
    plot.add_point_to_plot(x=training_iteration, y=score)

这是一个运行时间较长的算法,它将运行更长的时间,一整夜甚至几天,因此我们需要一种可行的方法来观察它的发展。

据我所知,Matplotlib没有提供方便的方法来执行此操作。当然,它具有用于动画等的API,但这不是我所需要的。这是一个循环,其中训练方法占用了90-99%的CPU时间,并且无法知道一轮训练需要多长时间,但是后台的线性代数堆需要花多长时间

我需要某种方法来绘制算法在执行过程中的演变。进程的主线程显然会忙于进行计算,因此它不应像GUI占用线程时通常给我的那样“不响应”,它应支持轻松地将数据添加到现有图形/线以显示演变的算法。

1 个答案:

答案 0 :(得分:0)

考虑使用threading module。这将允许您做的是让训练运行一个线程,而绘图运行在另一个线程。要将数据从训练模型发送到绘图,可以使用queue。在一起,代码看起来像这样:

模型线程:

for training_iteration in range(training_iterations_num):
    model.train()
    score = model.evaluate()
    data_queue.put(score)

绘图线程:

while(true):
     if not data_queue.empty():
         plot_data.append(data_queue.get())
     plot.display(plot_data)

然后可以使用绘图线程根据需要更新绘图。