关于Ploter绘制动态图的疑问
收藏
在进行Regression的新手入门时, 运行所给的示例程序没有任何问题, 动态图可以正常运行; 但是简单的调整了动态图代码出现的位置之后, 动态图的代码就造成了整个程序的崩溃。然后我和这短短5行的ploter代码殊死搏斗了2个小时,发现了一些有趣的现象:
1. 如下代码不能画出图像 , 但是删掉print函数之后就可以(并且如果print函数出现在for循环里,如下代码也无法运行);
import numpy as np
from paddle.utils.plot import Ploter
%matplotlib inline
train_prompt = "trainCost"
# print(train_prompt)
plot_prompt = Ploter(train_prompt)
for i in range(5):
plot_prompt.append(title = train_prompt, step =i , value = 8- i)
plot_prompt.plot()
2. 上述不含print的代码块, 在main()函数中的出现位置决定其是否能正确出图。
3. 在部分情况下, 如果在main函数中加入上述不含print的代码块,并成功画出图; 那么train(infer)函数中Ploter方法就能够成功作图;
我不相信计算机是玄学, 有没有大佬给讲讲,咋回事啊?这可咋整啊?不行只能去看源码了,幸好paddle开源了, 不过还是希望有大佬能帮帮忙给个解释呀。
0
收藏
请登录后评论
这个是因为notebook有个先天局限, 不能同时输出print和plot. 分散到不同的cell里就好了.
这俩还会有冲突?
是的, Notebook的底层问题.
notebook调用的是ipython.display包,plot()实际上是先clear再画个新的。加个print,clear就不管用了,自然没法更新。
都是开源的,多看两行源码就知道了,别什么玄学的瞎扯。
可以参考一下这个代码:
https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/utils/plot.py
现在有Visual DL组件,已经2.0版本了。看训练过程挺方便的。
简单的就直接matplotlib