In [9]:
from scipy.io import loadmat
import os,sys,glob,copy
import numpy as np
MAINFOLDER = '/data/ml2/rahul/fw-inference/RBM_cor1/'
TCNAME = 'rbm_20';N=40
#TCNAME = 'rbm_21';N=42
#TCNAME = 'rbm_22';N=44
comparison_idx = range(2*N)[1::2]
EXACTDIR   = MAINFOLDER+'/mat_out'
folder  = {}
plotname = 'Exact MAP $\mathcal{M}_{\delta}$'
if 'cor' in MAINFOLDER:
    folder[plotname] = MAINFOLDER +   '/resultsSpanning_cor3_MAPsolver/TRW/'
else:
    folder[plotname] = MAINFOLDER +   '/resultsSpanning_MAPsolver/TRW/'

plotname = 'Approx MAP $\mathcal{M}_{\delta}$'
if 'cor' in MAINFOLDER:
    folder[plotname] = MAINFOLDER +  '/resultsSpanningapprox_cor3_approxMAPsolver/TRW/'
else:
    folder[plotname] = MAINFOLDER +  '/resultsSpanningapprox_approxMAPsolver/TRW/'
    
#plotname = 'TRBP'
#folder[plotname] = MAINFOLDER+    '/TRWBP_opt/'

plotname = '$\mathbb{L}_{\delta}$'
folder[plotname] = MAINFOLDER+ '/resultsSpanning_lpLOCAL/TRW'


#Function to add two vectors
def add_vec(v1,v2):
    assert len(v1.shape)==1 and len(v2.shape)==1,'v1 and v2 must be of dimension 1'
    diff = np.abs(len(v2)-len(v1))
    if len(v1)==len(v2):
        return v1+v2
    elif len(v1)<len(v2):
        return np.append(v1,np.zeros(diff,)+v1[-1])+v2
    elif len(v2)<len(v1):
        return np.append(v2,np.zeros(diff,)+v2[-1])+v1
    else:
        assert False,'This should not happen'

def append_vec(v1,v2):
    if v1 == None:
        return v2
    elif v2== None:
        return v1
    else:
        return np.append(v1.ravel(),v2.ravel())

In [10]:
#Initialize L1 & LogZ
plot_data_l1 = {}
plot_data_logz={}
plot_marker ={}
for plotname in folder:
    plot_data_l1[plotname] = np.zeros(1,)
    plot_data_logz[plotname] = np.zeros(1,)
    plot_marker[plotname] = []
    
rhoit = 9
for plotname in folder:
    print "Processing : ",plotname
    print "Looking for files: ",folder[plotname]+'/*-sp0.mat'
    ctr = 1
    
    #Handle TRBP
    if plotname=='TRBP':
        logz_err = 0
        l1_err = 0
        ctr = 0
        for f in glob.glob(folder[plotname]+TCNAME+'*.mat'):
            mat = loadmat(f)
            exact = loadmat(EXACTDIR+'/'+os.path.basename(f.split('_rho')[0]).replace('-sp'+str(rhoit)+'.mat','')+'.mat')
            l1_err += np.abs(mat['trwbp_opt_marg'].ravel()[comparison_idx]-exact['exact_node_marginals'].ravel()[comparison_idx]).mean()
            logz_err+= np.abs(mat['trwbp_opt_logz'].ravel()[0]-exact['log_partition'].ravel()[0])
            ctr +=1
        print l1_err,logz_err,ctr
        plot_data_l1[plotname] = np.ones(400,)*(l1_err/float(ctr))
        plot_data_logz[plotname] = np.ones(400,)*(logz_err/float(ctr))
        continue
        
    #Handle FW
    for f in glob.glob(folder[plotname]+'/'+TCNAME+'*-sp0.mat'):
        logz_err = None
        l1_err = None
        cur_markers = []
        for rhoit in range(10):
            f_rho = f.replace('-sp0','-sp'+str(rhoit))
            exact = loadmat(EXACTDIR+'/'+os.path.basename(f_rho).replace('-sp'+str(rhoit)+'.mat','')+'.mat')
            mat   = loadmat(f_rho)
            print 'Reading ',f_rho
            #L1 marginals
            marginals = mat['IterSet'][:,comparison_idx]
            numIts = marginals.shape[0]
            dim    = marginals.shape[1]
            exact_marginals = exact['exact_node_marginals'].ravel()[comparison_idx].reshape(1,dim).repeat(numIts,0)
            l1_err = append_vec(l1_err,np.abs(marginals-exact_marginals).mean(1))
            print np.abs(marginals-exact_marginals).mean(1)[-1]
            #Log Z
            if 'gap_full' not in mat:
                logz_err = append_vec(logz_err,np.abs((-1*mat['Obj_Val']+mat['Dual_Gap']).ravel()-exact['log_partition'][0][0]))
                #logz_err = append_vec(logz_err,((-1*mat['Obj_Val']+mat['Dual_Gap']).ravel()-exact['log_partition'][0][0]))
            else:
                logz_err = append_vec(logz_err,np.abs((-1*mat['Obj_Val']+mat['gap_full']).ravel()-exact['log_partition'][0][0]))
                #logz_err = append_vec(logz_err,((-1*mat['Obj_Val']+mat['gap_full']).ravel()-exact['log_partition'][0][0]))
            cur_markers.append(logz_err.shape[0]-1)
        
        plot_marker[plotname] = copy.deepcopy(cur_markers)
        assert len(plot_marker[plotname])==10,'10 markers should be found'
        plot_data_l1[plotname] = add_vec(l1_err,plot_data_l1[plotname])
        plot_data_logz[plotname] = add_vec(logz_err,plot_data_logz[plotname])
        ctr +=1


Processing :  Exact MAP $\mathcal{M}_{\delta}$
Looking for files:  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_cor3_MAPsolver/TRW//*-sp0.mat
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_cor3_MAPsolver/TRW/rbm_20-sp0.mat
0.322870994005
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_cor3_MAPsolver/TRW/rbm_20-sp1.mat
0.308629322008
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_cor3_MAPsolver/TRW/rbm_20-sp2.mat
0.332448200693
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_cor3_MAPsolver/TRW/rbm_20-sp3.mat
0.318913569916
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_cor3_MAPsolver/TRW/rbm_20-sp4.mat
0.318021001446
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_cor3_MAPsolver/TRW/rbm_20-sp5.mat
0.315493199504
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_cor3_MAPsolver/TRW/rbm_20-sp6.mat
0.314621184439
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_cor3_MAPsolver/TRW/rbm_20-sp7.mat
0.319313683993
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_cor3_MAPsolver/TRW/rbm_20-sp8.mat
0.316280934235
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_cor3_MAPsolver/TRW/rbm_20-sp9.mat
0.315855804443
Processing :  $\mathbb{L}_{\delta}$
Looking for files:  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_lpLOCAL/TRW/*-sp0.mat
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_lpLOCAL/TRW/rbm_20-sp0.mat
0.3661984625
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_lpLOCAL/TRW/rbm_20-sp1.mat
0.3661984625
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_lpLOCAL/TRW/rbm_20-sp2.mat
0.3661984625
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_lpLOCAL/TRW/rbm_20-sp3.mat
0.3661984625
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_lpLOCAL/TRW/rbm_20-sp4.mat
0.3661984625
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_lpLOCAL/TRW/rbm_20-sp5.mat
0.3661984625
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_lpLOCAL/TRW/rbm_20-sp6.mat
0.3661984625
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_lpLOCAL/TRW/rbm_20-sp7.mat
0.3661984625
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_lpLOCAL/TRW/rbm_20-sp8.mat
0.3661984625
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanning_lpLOCAL/TRW/rbm_20-sp9.mat
0.3661984625
Processing :  Approx MAP $\mathcal{M}_{\delta}$
Looking for files:  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanningapprox_cor3_approxMAPsolver/TRW//*-sp0.mat
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanningapprox_cor3_approxMAPsolver/TRW/rbm_20-sp0.mat
0.322112889706
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanningapprox_cor3_approxMAPsolver/TRW/rbm_20-sp1.mat
0.322553785836
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanningapprox_cor3_approxMAPsolver/TRW/rbm_20-sp2.mat
0.328088837077
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanningapprox_cor3_approxMAPsolver/TRW/rbm_20-sp3.mat
0.310153801021
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanningapprox_cor3_approxMAPsolver/TRW/rbm_20-sp4.mat
0.313530740686
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanningapprox_cor3_approxMAPsolver/TRW/rbm_20-sp5.mat
0.328716244751
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanningapprox_cor3_approxMAPsolver/TRW/rbm_20-sp6.mat
0.316038794327
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanningapprox_cor3_approxMAPsolver/TRW/rbm_20-sp7.mat
0.318101029897
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanningapprox_cor3_approxMAPsolver/TRW/rbm_20-sp8.mat
0.316654443547
Reading  /data/ml2/rahul/fw-inference/RBM_cor1//resultsSpanningapprox_cor3_approxMAPsolver/TRW/rbm_20-sp9.mat
0.3188777225

In [11]:
print plot_marker


{'Exact MAP $\\mathcal{M}_{\\delta}$': [28, 45, 60, 73, 77, 80, 85, 87, 91, 93], '$\\mathbb{L}_{\\delta}$': [1, 15, 30, 47, 73, 89, 105, 121, 132, 142], 'Approx MAP $\\mathcal{M}_{\\delta}$': [3, 10, 14, 15, 18, 20, 23, 25, 26, 27]}

In [15]:
import matplotlib as mpl
mpl.rcParams['lines.linewidth']=4.5
mpl.rcParams['lines.markersize']=12
mpl.rcParams['text.usetex']=True
mpl.rcParams['text.latex.unicode']=True
mpl.rcParams['font.family'] = 'serif'
mpl.rcParams['font.serif'] = 'Times New Roman'
mpl.rcParams['text.latex.preamble']= '\usepackage{amsfonts}'
mpl.rcParams['font.size'] = 40
mpl.rcParams['axes.labelsize']=40
mpl.rcParams['legend.fontsize']=33
figure(1,figsize=(10,10))
colors = ['r','b','g','k','c']
markers= ['*','v','<','>','|']


for idx,plottype in enumerate(folder):
    L = plot_data_l1[plottype].ravel().shape[0]
    X = np.arange(1,L+1,1)#10)
    Y = plot_data_l1[plottype]#[np.arange(0,L)]#,10)]
    plot(X,Y,label=plottype,color=colors[idx],marker = markers[idx])
    for m in plot_marker[plottype]:
        markat = np.floor(m)
        #plt.axvline(m,color=colors[idx],linewidth=2,linestyle='--')
        #print markat,plot_data_l1[plottype].shape
        y_pt = plot_data_l1[plottype][markat]
        #plt.plot([markat,markat],[y_pt,y_pt+0.1],marker = markers[idx],color=colors[idx],linewidth=2,linestyle='--')
xlabel('MAP calls')
ylim([0,0.8])
xlim([0,150])
ylabel('Error in Marginals $(\zeta_{\mu})$')
legend(bbox_to_anchor=(0.9, 0.9),bbox_transform=plt.gcf().transFigure)


f2 = figure(2,figsize=(10,10))
yscale('log')
for idx,plottype in enumerate(folder):
    L = plot_data_logz[plottype].ravel().shape[0]
    X = np.arange(1,L+1)
    Y = plot_data_logz[plottype]
    plot(X,Y,label=plottype,color=colors[idx],marker = markers[idx])
    print Y.shape,X.shape,Y[-5:]
    for m in plot_marker[plottype]:
        markat = np.floor(m)
        y_pt = plot_data_logz[plottype][markat]
        #plt.plot([m,m],[y_pt,y_pt+(y_pt*10*0.5)],marker = markers[idx],color=colors[idx],linewidth=2,linestyle='--')
xlabel('MAP calls')
xlim([0,100])
ylabel('Error in LogZ $(\zeta_{\mathrm{\log Z}})$')
legend(bbox_to_anchor=(0.9, 0.45),bbox_transform=plt.gcf().transFigure)


if os.path.exists('./plots/'+TCNAME+'-l1-unrolled.pdf'):
    os.remove('./plots/'+TCNAME+'-l1-unrolled.pdf')
if os.path.exists('./plots/'+TCNAME+'-logz-unrolled.pdf'):
    os.remove('./plots/'+TCNAME+'-logz-unrolled.pdf')
figure(1)
plt.savefig('./plots/'+TCNAME+'-l1-unrolled.pdf',bbox_inches='tight')
figure(2)
plt.savefig('./plots/'+TCNAME+'-logz-unrolled.pdf',bbox_inches='tight')


(94,) (94,) [ 5.86712139  5.81105494  5.4100886   5.74302236  5.27010206]
(143,) (143,) [ 185.60797161  185.28965432  185.24865232  185.04768115  184.96393522]
(28,) (28,) [ 3.71638097  9.56999398  0.56483885  1.26460667  1.80565398]