in automl21/enr.py [0:0]
def plot_agg(self, n_iter, tag='t', n_sample=50):
ista_norms, ista_aa_norms, neural_norms = [], [], []
ista_objs, ista_aa_objs, neural_objs = [], [], []
for seed in range(n_sample):
inst = self.sample_single_inst(seed=seed)
x_cvxpy = self.solve_cvxpy(inst)
cvxpy_obj = self.obj(inst, x_cvxpy).cpu()
d_ISTA = self.solve_ISTA(inst, n_iter=n_iter, track_iterates=True)
d_ISTA_AA = self.solve_ISTA_AA(
inst, n_iter=n_iter, track_iterates=True)
d_ISTA_neural = self.solve_ISTA_neural(
inst, n_iter=n_iter, track_iterates=True)
ista_norms.append(d_ISTA['rel_residual_norms'])
ista_aa_norms.append(d_ISTA_AA['rel_residual_norms'])
neural_norms.append(d_ISTA_neural['rel_residual_norms'])
ista_objs.append((cvxpy_obj-d_ISTA['objs'].cpu())**2)
ista_aa_objs.append((cvxpy_obj-d_ISTA_AA['objs'].cpu())**2)
neural_objs.append((cvxpy_obj-d_ISTA_neural['objs'].cpu())**2)
ista_norms = torch.tensor(ista_norms)
ista_aa_norms = torch.tensor(ista_aa_norms)
neural_norms = torch.tensor(neural_norms)
ista_objs = torch.stack(ista_objs)
ista_aa_objs = torch.stack(ista_aa_objs)
neural_objs = torch.stack(neural_objs)
nrow, ncol = 1, 2
fig, axs = plt.subplots(nrow, ncol, figsize=(6*ncol, 4*nrow))
ax = axs[0]
mean, std = ista_norms.mean(dim=0), ista_norms.std(dim=0)
xs = np.arange(len(mean))
l, = ax.plot(xs, mean, label='ISTA')
ax.fill_between(xs, mean-std, mean+std, color=l.get_color(), alpha=0.2)
mean, std = ista_aa_norms.mean(dim=0), ista_aa_norms.std(dim=0)
l, = ax.plot(xs, mean, label='ISTA+AA')
ax.fill_between(xs, mean-std, mean+std, color=l.get_color(), alpha=0.2)
mean, std = neural_norms.mean(dim=0), neural_norms.std(dim=0)
l, = ax.plot(xs, mean, label='ISTA+Neural')
ax.fill_between(xs, mean-std, mean+std, color=l.get_color(), alpha=0.2)
ax.set_yscale('log')
ax.set_xlabel('Fixed-Point Iteration')
ax.set_ylabel('Fixed-Point Residual')
ax = axs[1]
min_obj_dist = np.inf
mean, std = ista_objs.mean(dim=0), ista_objs.std(dim=0)
min_obj_dist = min(min_obj_dist, mean.min())
l, = ax.plot(xs, mean, label='ISTA')
ax.fill_between(xs, mean-std, mean+std, color=l.get_color(), alpha=0.2)
mean, std = ista_aa_objs.mean(dim=0), ista_aa_objs.std(dim=0)
min_obj_dist = min(min_obj_dist, mean.min())
l, = ax.plot(xs, mean, label='ISTA+AA')
ax.fill_between(xs, mean-std, mean+std, color=l.get_color(), alpha=0.2)
mean, std = neural_objs.mean(dim=0), neural_objs.std(dim=0)
min_obj_dist = min(min_obj_dist, mean.min())
l, = ax.plot(xs, mean, label='ISTA+Neural')
ax.fill_between(xs, mean-std, mean+std, color=l.get_color(), alpha=0.2)
# ax.set_ylim(min_obj_dist, 1e3)
ax.set_yscale('log')
ax.set_xlabel('Fixed-Point Iteration')
ax.set_ylabel('Objective Distance')
fname = 'agg_' + tag + '.png'
fig.tight_layout()
fig.savefig(fname, transparent=True)
plt.close(fig)
os.system(f"convert {fname} -trim {fname}")