Advanced Computing Platform for Theoretical Physics

Commit 6ab9c7a1 authored by Pengfei Zhou's avatar Pengfei Zhou
Browse files

grad

parent ad71979c
......@@ -34,7 +34,7 @@ def out_product(tensor,order):
def get_symmetric_tensor(order,bond):
rank_number = order*bond
weights = np.random.rand(rank_number)
basis_vector = np.random.rand(rank_number,bond,1)
basis_vector = np.random.randn(rank_number,bond,1)
symmetirc_tensor = weights[0]*out_product(basis_vector[0],order)
for i in range(1,rank_number):
symmetirc_tensor += weights[i]*out_product(basis_vector[i],order)
......@@ -97,7 +97,7 @@ if __name__ == '__main__':
graph = nx.complete_graph(args.n)
edges = list(graph.edges)
elif args.graph == "read_from_file":
args.n,edges=convert('Generated_graphs.20.03.g6',args.which)
args.n,edges=convert('Generated_graphs.42.05.g6',args.which)
print(args.n)
args.graph='rrg'
#print(edges)
......@@ -117,22 +117,26 @@ if __name__ == '__main__':
G.add_nodes_from(np.arange(args.n))
G.add_edges_from(edges)
if args.wl:
time_1=time.time()
n2,edges2=convert('Generated_graphs.20.03.g6',args.which+1)
G1=nx.Graph()
G1.add_nodes_from(np.arange(n2))
G1.add_edges_from(edges2)
from wlkernel.weisfeiler_lehman import is_possibly_isomorphic
time_1=time.time()
print(is_possibly_isomorphic(G,G1))
print("time: {:.2g} sec".format(time.time()-time_1))
if args.nx_iso:
time_1=time.time()
n2,edges2=convert('Generated_graphs.20.03.g6',args.which+1)
if args.graph=='read_from_file':
n2,edges2=convert('Generated_graphs.42.05.g6',args.which+20)
G1=nx.Graph()
G1.add_nodes_from(np.arange(n2))
G1.add_edges_from(edges2)
print(nx.is_isomorphic(G,G1))
print("time: {:.2g} sec".format(time.time()-time_1))
else:
G1=nx.random_regular_graph(args.k,args.n)
time_1=time.time()
print(nx.is_isomorphic(G,G1))
print("time: {:.2g} sec".format(time.time()-time_1))
G_backup = G.copy()
t0 = time.time()
......@@ -143,27 +147,35 @@ if __name__ == '__main__':
max_degree = max(np.array(G.degree)[:, 1])
np.random.seed(args.seed1)
torch.manual_seed(args.seed1)
tensor1=[]
#tensor1=[]
tensor1=torch.nn.ParameterList([])
tensor2=torch.randn(args.bond,args.bond,dtype=torch.float64,device=device)
tensor2=torch.triu(tensor2)+torch.triu(tensor2,diagonal=1).t()
y=torch.exp(tensor2)
eig,v=torch.symeig(y)
print(eig)
print(v)
print(tensor2)
for i in range(1,max_degree+1):
tensor1.append(torch.from_numpy(get_symmetric_tensor(i,args.bond)))
tensor1.append(torch.nn.Parameter(torch.from_numpy(get_symmetric_tensor(i,args.bond))))
print(tensor1)
'''
if args.raw:
args.node = "raw"
'''
np.savetxt('edges_{}.txt'.format(args.which),edges)
tn = Tensor_Network(args.n, edges, args.choice, args.bond,tensor1,tensor2, beta, seed=args.seed2, maxdim=args.maxdim,
verbose=args.verbose, Dmax=args.Dmax, chi=args.chi, node_type=args.node)
# tn.tensors[0].tensor.norm().backward()
t0 = time.time()
lnZ_tn = tn.contraction()
(lnZ_tn / beta).backward()
(lnZ_tn).backward()
lnZ_tn = lnZ_tn
print("lnZ_tn = {:.15g}, time: {:.2g} Sec. maxdim_inter={:d}".format(lnZ_tn.item(), time.time() - t0,
int(tn.maxdim_intermediate)))
print("beta.grad={:.15g}".format(beta.grad.item()))
print(tensor1)
print(tensor1[2].grad)
if args.output:
with open('{}_n={}_seed1_{}_beta_{}.txt'.format(args.graph,args.n,args.seed1,args.beta),'a') as fp:
fp.write('{} {:.15g} {:.15g}\n'.format(args.which,lnZ_tn.item(),beta.grad.item()))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment