提交 fb2b54f4 编写于 作者: Q qiaolongfei

refine plot_curve

上级 21fa3eb0
......@@ -14,8 +14,9 @@
import collections
import re
from paddle.trainer_config_helpers.default_decorators import wrap_name_default
import paddle.trainer_config_helpers as conf_helps
from paddle.trainer_config_helpers.default_decorators import wrap_name_default
class LayerType(type):
......
from plot import Plot
__all__ = ['Plot']
......@@ -2,15 +2,26 @@ from IPython import display
import os
class PlotCost(object):
"""
append train and test cost in event_handle and then call plot.
"""
class PlotData(object):
def __init__(self):
self.train_costs = ([], [])
self.test_costs = ([], [])
self.step = []
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")
if not self.__plot_is_disabled__():
import matplotlib.pyplot as plt
......@@ -19,30 +30,36 @@ class PlotCost(object):
def __plot_is_disabled__(self):
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):
if self.__plot_is_disabled__():
return
self.plt.plot(*self.train_costs)
self.plt.plot(*self.test_costs)
title = []
if len(self.train_costs[0]) > 0:
title.append('Train Cost')
if len(self.test_costs[0]) > 0:
title.append('Test Cost')
self.plt.legend(title, loc='upper left')
titles = []
for title in self.args:
data = self.__plot_data__[title]
assert isinstance(data, PlotData)
if len(data.step) > 0:
titles.append(title)
self.plt.plot(data.step, data.value)
self.plt.legend(titles, loc='upper left')
display.clear_output(wait=True)
display.display(self.plt.gcf())
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):
self.train_costs = ([], [])
self.test_costs = ([], [])
self.__plot_data__ = []
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.
先完成此消息的编辑!
想要评论请 注册