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)
Пример #2
0
 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)
Пример #3
0
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))
Пример #5
0
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)
Пример #6
0
 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)