提交 fb2b54f4 编写于 作者: Q qiaolongfei

refine plot_curve

上级 21fa3eb0
...@@ -14,8 +14,9 @@ ...@@ -14,8 +14,9 @@
import collections import collections
import re import re
from paddle.trainer_config_helpers.default_decorators import wrap_name_default
import paddle.trainer_config_helpers as conf_helps import paddle.trainer_config_helpers as conf_helps
from paddle.trainer_config_helpers.default_decorators import wrap_name_default
class LayerType(type): class LayerType(type):
......
from plot import Plot
__all__ = ['Plot']
...@@ -2,15 +2,26 @@ from IPython import display ...@@ -2,15 +2,26 @@ from IPython import display
import os import os
class PlotCost(object): class PlotData(object):
"""
append train and test cost in event_handle and then call plot.
"""
def __init__(self): def __init__(self):
self.train_costs = ([], []) self.step = []
self.test_costs = ([], []) self.value = []
def append(self, step, value):
self.step.append(step)
self.value.append(value)
def reset(self):
self.step = []
self.value = []
class Plot(object):
def __init__(self, *args):
self.args = args
self.__plot_data__ = {}
for title in args:
self.__plot_data__[title] = PlotData()
self.__disable_plot__ = os.environ.get("DISABLE_PLOT") self.__disable_plot__ = os.environ.get("DISABLE_PLOT")
if not self.__plot_is_disabled__(): if not self.__plot_is_disabled__():
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
...@@ -19,30 +30,36 @@ class PlotCost(object): ...@@ -19,30 +30,36 @@ class PlotCost(object):
def __plot_is_disabled__(self): def __plot_is_disabled__(self):
return self.__disable_plot__ == "True" return self.__disable_plot__ == "True"
def append(self, title, step, value):
assert isinstance(title, basestring)
assert self.__plot_data__.has_key(title)
data = self.__plot_data__[title]
assert isinstance(data, PlotData)
data.append(step, value)
def plot(self): def plot(self):
if self.__plot_is_disabled__(): if self.__plot_is_disabled__():
return return
self.plt.plot(*self.train_costs) titles = []
self.plt.plot(*self.test_costs) for title in self.args:
title = [] data = self.__plot_data__[title]
if len(self.train_costs[0]) > 0: assert isinstance(data, PlotData)
title.append('Train Cost') if len(data.step) > 0:
if len(self.test_costs[0]) > 0: titles.append(title)
title.append('Test Cost') self.plt.plot(data.step, data.value)
self.plt.legend(title, loc='upper left') self.plt.legend(titles, loc='upper left')
display.clear_output(wait=True) display.clear_output(wait=True)
display.display(self.plt.gcf()) display.display(self.plt.gcf())
self.plt.gcf().clear() self.plt.gcf().clear()
def append_train_cost(self, step, cost):
self.train_costs[0].append(step)
self.train_costs[1].append(cost)
def append_test_cost(self, step, cost):
self.test_costs[0].append(step)
self.test_costs[1].append(cost)
def reset(self): def reset(self):
self.train_costs = ([], []) self.__plot_data__ = []
self.test_costs = ([], [])
if __name__ == '__main__':
title = "cost"
plot_test = Plot(title)
plot_test.append(title, 1, 1)
plot_test.append(title, 2, 2)
for k, v in plot_test.__plot_data__.iteritems():
print k, v.step, v.value
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册