def T_givenq(p): _,H_ = getH(q,V) out = eigen(H_.data) lam = out[0] Q = out[1] temp = softabs_map(lam,alpha) inv_exp_H = torch.mm(torch.mm(Q,torch.diag(1/temp)),torch.t(Q)) o = 0.5 * torch.dot(p.data,torch.mv(inv_exp_H,p.data)) temp2 = 0.5 * torch.log((temp)).sum() return(o + temp2)
def T_givenq(p): _, H_ = getH(q, V) #debug_dict.update({"explicit":_.data.clone()}) out = eigen(H_.data) lam = out[0] Q = out[1] temp = softabs_map(lam, alpha) #print("explicit p {}".format(q.data)) inv_exp_H = torch.mm(torch.mm(Q, torch.diag(1 / temp)), torch.t(Q)) o = 0.5 * torch.dot(p.data, torch.mv(inv_exp_H, p.data)) temp2 = 0.5 * torch.log((temp)).sum() print("explicit tau {}".format(o)) print("explicit logdetmetric {}".format(temp2)) return (o + temp2)
def generate_momentum(q): # if lam == None or Q == None: # H_ = self.linkedV.getH_tensor() # lam, Q = eigen(H_) _, H_ = getH(q, V) lam, Q = eigen(H_.data) # print(lam) # print(Q) #exit() # print(lam.shape) # print(type(lam)) # print(type(lam[0])) # exit() #print(lam) #exit() temp = torch.mm(Q, torch.diag(torch.sqrt(softabs_map(lam, alpha)))) out = temp.mv(torch.randn(len(lam))) # print(temp) # exit() return (out)
temp = softabs_map(lam,alpha) inv_exp_H = torch.mm(torch.mm(Q,torch.diag(1/temp)),torch.t(Q)) o = 0.5 * torch.dot(p.data,torch.mv(inv_exp_H,p.data)) temp2 = 0.5 * torch.log((temp)).sum() return(o + temp2) return(T_givenq) def H(q,p,alpha): # returns float return(V(q).data[0] + T(q,alpha)(p)) store = torch.zeros((chain_l,dim)) g,H_ = getH(q,V) lam,Q = eigen(H_.data) begin = time.time() for i in range(chain_l): print("round {}".format(i)) out = rmhmc_step(q,H,0.1,10,alp,0.1,V) store[i,]=out[0].data q.data = out[0].data totalt = time.time() - begin store = store[burn_in:,] store = store.numpy() empCov = np.cov(store,rowvar=False) emmean = np.mean(store,axis=0) print("length of chain is {}".format(chain_l))
def p_sharp(q, p): _, H = getH(q, V) lam, Q = eigen(H.data) p_s = dtaudp(p.data, alp, lam, Q) return (p_s)
def generate(q): lam, Q = eigen(getH(q, V).data) temp = torch.mm(Q, torch.diag(torch.sqrt(softabs_map(lam, alpha)))) out = torch.mv(temp, torch.randn(len(lam))) return (out)
def p_sharp(q, p): lam, Q = eigen(getH(q, V).data) p_s = dtaudp(p.data, alp, lam, Q) return (p_s)