updates to the benchmark viewer code + autopep8 (#184)
* viz docs and syntactic sugar wip * update viewer yaml to use persistent volume claims * move plot_util to baselines.common, update links * use 1Tb hard drive for results viewer * small updates to benchmark vizualizer code * autopep8 * autopep8 * any folder can be a benchmark * massage games image a little bit * fixed --preload option in app.py * remove preload from run_viewer.sh * remove pdb breakpoints * update bench-viewer.yaml
This commit is contained in:
@@ -5,7 +5,7 @@ matplotlib.use('TkAgg') # Can change to 'Agg' for non-interactive mode
|
|||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
plt.rcParams['svg.fonttype'] = 'none'
|
plt.rcParams['svg.fonttype'] = 'none'
|
||||||
|
|
||||||
from baselines.bench.monitor import load_results
|
from baselines.common import plot_util
|
||||||
|
|
||||||
X_TIMESTEPS = 'timesteps'
|
X_TIMESTEPS = 'timesteps'
|
||||||
X_EPISODES = 'episodes'
|
X_EPISODES = 'episodes'
|
||||||
@@ -16,7 +16,7 @@ POSSIBLE_X_AXES = [X_TIMESTEPS, X_EPISODES, X_WALLTIME]
|
|||||||
EPISODES_WINDOW = 100
|
EPISODES_WINDOW = 100
|
||||||
COLORS = ['blue', 'green', 'red', 'cyan', 'magenta', 'yellow', 'black', 'purple', 'pink',
|
COLORS = ['blue', 'green', 'red', 'cyan', 'magenta', 'yellow', 'black', 'purple', 'pink',
|
||||||
'brown', 'orange', 'teal', 'coral', 'lightblue', 'lime', 'lavender', 'turquoise',
|
'brown', 'orange', 'teal', 'coral', 'lightblue', 'lime', 'lavender', 'turquoise',
|
||||||
'darkgreen', 'tan', 'salmon', 'gold', 'lightpurple', 'darkred', 'darkblue']
|
'darkgreen', 'tan', 'salmon', 'gold', 'darkred', 'darkblue']
|
||||||
|
|
||||||
def rolling_window(a, window):
|
def rolling_window(a, window):
|
||||||
shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
|
shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
|
||||||
@@ -50,7 +50,7 @@ def plot_curves(xy_list, xaxis, yaxis, title):
|
|||||||
maxx = max(xy[0][-1] for xy in xy_list)
|
maxx = max(xy[0][-1] for xy in xy_list)
|
||||||
minx = 0
|
minx = 0
|
||||||
for (i, (x, y)) in enumerate(xy_list):
|
for (i, (x, y)) in enumerate(xy_list):
|
||||||
color = COLORS[i]
|
color = COLORS[i % len(COLORS)]
|
||||||
plt.scatter(x, y, s=2)
|
plt.scatter(x, y, s=2)
|
||||||
x, y_mean = window_func(x, y, EPISODES_WINDOW, np.mean) #So returns average of last EPISODE_WINDOW episodes
|
x, y_mean = window_func(x, y, EPISODES_WINDOW, np.mean) #So returns average of last EPISODE_WINDOW episodes
|
||||||
plt.plot(x, y_mean, color=color)
|
plt.plot(x, y_mean, color=color)
|
||||||
@@ -62,19 +62,18 @@ def plot_curves(xy_list, xaxis, yaxis, title):
|
|||||||
fig.canvas.mpl_connect('resize_event', lambda event: plt.tight_layout())
|
fig.canvas.mpl_connect('resize_event', lambda event: plt.tight_layout())
|
||||||
plt.grid(True)
|
plt.grid(True)
|
||||||
|
|
||||||
def plot_results(dirs, num_timesteps, xaxis, yaxis, task_name):
|
|
||||||
tslist = []
|
def split_by_task(taskpath):
|
||||||
for dir in dirs:
|
return taskpath['dirname'].split('/')[-1].split('-')[0]
|
||||||
ts = load_results(dir)
|
|
||||||
ts = ts[ts.l.cumsum() <= num_timesteps]
|
def plot_results(dirs, num_timesteps=10e6, xaxis=X_TIMESTEPS, yaxis=Y_REWARD, title='', split_fn=split_by_task):
|
||||||
tslist.append(ts)
|
results = plot_util.load_results(dirs)
|
||||||
xy_list = [ts2xy(ts, xaxis, yaxis) for ts in tslist]
|
plot_util.plot_results(results, xy_fn=lambda r: ts2xy(r['monitor'], xaxis, yaxis), split_fn=split_fn, average_group=True, resample=int(1e6))
|
||||||
plot_curves(xy_list, xaxis, yaxis, task_name)
|
|
||||||
|
|
||||||
# Example usage in jupyter-notebook
|
# Example usage in jupyter-notebook
|
||||||
# from baselines import results_plotter
|
# from baselines.results_plotter import plot_results
|
||||||
# %matplotlib inline
|
# %matplotlib inline
|
||||||
# results_plotter.plot_results(["./log"], 10e6, results_plotter.X_TIMESTEPS, "Breakout")
|
# plot_results("./log")
|
||||||
# Here ./log is a directory containing the monitor.csv files
|
# Here ./log is a directory containing the monitor.csv files
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
Reference in New Issue
Block a user