def plot_step_per_episode(model): """ :param model: :return: """ out_dir = 'out/' + model + '/img/' check_dir(out_dir) input_dir = 'out/' + model + '/step-per-episode.txt' with open(input_dir, 'r') as f: lines = f.readlines()[1:] lines = np.array(lines) lines = np.char.strip(lines, '\n') lines = np.array([x.split(',') for x in lines]) episodes = lines[:, 1].astype(np.int) episode_counter = Counter(episodes) # number of steps for episode mavg_episode_counter = moving_average(np.array( list(episode_counter.values())), window=100) plt.figure() plt.plot(np.array(list(episode_counter.keys()))[99:], mavg_episode_counter) plt.xlabel('episode', fontsize=11) plt.ylabel('step', fontsize=11) plt.title('Steps per Episode: "' + model + '"', weight='bold', fontsize=12) plt.savefig(out_dir + 'step-per-episode.pdf') plt.close()
def plot_return(model): """ :param model: """ out_dir = 'out/' + model + '/img/' check_dir(out_dir) input_dir = 'out/' + model + '/return.txt' with open(input_dir, 'r') as f: lines = f.readlines()[1:] lines = np.array(lines) lines = np.char.strip(lines, '\n') lines = np.array([x.split(',') for x in lines]) steps = lines[:, 0].astype(np.int) scores = lines[:, 2].astype(np.float) steps = steps.astype(np.float) scores = scores.astype(np.float) plt.figure() plt.plot(steps, scores) plt.xlabel('step', fontsize=11) plt.ylabel('average score per play', fontsize=11) ax = plt.gca() ax.xaxis.set_major_formatter(EngFormatter()) plt.title('Evaluation Return: "' + model + '"', weight='bold', fontsize=12) plt.savefig(out_dir + 'evaluation-return.pdf') plt.close()
def plot_return_moving_average(model): """ :param model: """ out_dir = 'out/' + model + '/img/' check_dir(out_dir) input_dir = 'out/' + model + '/return_moving_average.txt' with open(input_dir, 'r') as f: lines = f.readlines()[1:] lines = np.array(lines) lines = np.char.strip(lines, '\n') lines = np.array([x.split(',') for x in lines]) return_moving_averages = lines[:, 0].astype(np.float) episodes = np.arange(30, len(return_moving_averages) + 30) plt.figure() plt.plot(episodes, return_moving_averages) plt.xlabel('episodes', fontsize=11) plt.ylabel('return per episode', fontsize=11) ax = plt.gca() ax.xaxis.set_major_formatter(EngFormatter()) plt.title('Training Return: "' + model + '"', weight='bold', fontsize=12) plt.savefig(out_dir + 'training-return.pdf') plt.close()
def plot_return_comparison(model1, model2, label1, label2): """ :param model1: :param model2: :param label1: :parameter label2: """ out_dir = 'out/' + model2 + '/img/comparison/' check_dir(out_dir) input_dir1 = 'out/' + model1 + '/return.txt' input_dir2 = 'out/' + model2 + '/return.txt' with open(input_dir1, 'r') as f: lines = f.readlines()[1:] lines = np.array(lines) lines = np.char.strip(lines, '\n') lines = np.array([x.split(',') for x in lines]) steps1 = lines[:, 0] steps1 = steps1.astype(np.float) score1 = lines[:, 2] score1 = score1.astype(np.float) with open(input_dir2, 'r') as f: lines = f.readlines()[1:] lines = np.array(lines) lines = np.char.strip(lines, '\n') lines = np.array([x.split(',') for x in lines]) steps2 = lines[:, 0].astype(np.float) score2 = lines[:, 2].astype(np.float) plt.figure() plt.plot(steps1[:len(steps2) - 1], score1[:len(score2) - 1], label=label1) # plt.plot(steps1, score1, label=label1) plt.plot(steps2, score2, label=label2) plt.xlabel('episodes', fontsize=11) plt.ylabel('score', fontsize=11) plt.xlim([-10000, 310000]) plt.ylim([-1, 30]) ax = plt.gca() ax.xaxis.set_major_formatter(EngFormatter()) plt.legend() plt.title('Evaluation returns of models "' + model1 + '" and "' + model2 + '"', weight='bold', fontsize=12) plt.savefig(out_dir + 'scores-comparison-' + model1 + '-' + model2 + '.pdf') plt.close()
def plot_loss_comparison(models): """ :param models: """ out_dirs = [] steps = [] losses = [] mavg_losses = [] for i, e in enumerate(models): out_dir = 'out/' + e + '/img/comparison/' out_dirs.append(out_dir) check_dir(out_dir) input_dir = 'out/' + e + '/loss.txt' with open(input_dir, 'r') as f: lines = f.readlines()[1:] lines = np.array(lines) lines = np.char.strip(lines, '\n') lines = np.array([x.split(',') for x in lines]) steps.append(lines[:, 0].astype(np.int)) losses.append(lines[:, 2].astype(np.float)) mavg_losses.append(moving_average(losses[i], window=50)) plt.figure() for i, e in enumerate(models): plt.plot(steps[i][50::1000], mavg_losses[i][::1000], label='Loss ' + e) plt.xlabel('episodes', fontsize=11) plt.ylabel('loss', fontsize=11) ax = plt.gca() ax.xaxis.set_major_formatter(EngFormatter()) ax.yaxis.set_major_formatter(EngFormatter()) plt.legend() plt.title('Temporal-difference errors', weight='bold', fontsize=12) for i in range(len(models)): m = str(models).replace('[', '').replace(']', '').replace(', ', '-').replace("'", "") plt.savefig(out_dirs[i] + m + '-losses-comparison.pdf') plt.close()
def plot_loss_moving_average(model): """ :param model: :return: """ out_dir = 'out/' + model + '/img/' check_dir(out_dir) input_dir = 'out/' + model + '/loss.txt' with open(input_dir, 'r') as f: lines = f.readlines()[1:] lines = np.array(lines) lines = np.char.strip(lines, '\n') lines = np.array([x.split(',') for x in lines]) steps = lines[:, 0].astype(np.int) losses = lines[:, 2].astype(np.float) losses = moving_average(losses, window=50) plt.figure() plt.plot(steps[50::1000], losses[::1000]) plt.xlabel('step', fontsize=11) plt.ylabel('loss', fontsize=11) ax = plt.gca() ax.xaxis.set_major_formatter(EngFormatter()) plt.title('Temporal difference error: "' + model + '"', weight='bold', fontsize=12) plt.savefig(out_dir + 'temporal-difference-error.pdf') plt.close()