我不确定这是正确的问题还是措辞,请随时提出建议!
现在,我的问题是这样的:假设我们有一种算法,可以长期运行,例如训练像神经网络这样的机器学习模型,那么代码看起来像这样:
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占用线程时通常给我的那样“不响应”,它应支持轻松地将数据添加到现有图形/线以显示演变的算法。
答案 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)
然后可以使用绘图线程根据需要更新绘图。