Skip to content

Commit a15cf3a

Browse files
committedApr 21, 2022
adding burgers files
1 parent 61c1c79 commit a15cf3a

9 files changed

+3142
-0
lines changed
 

‎GKN_orthogonal_burgers1d.py

+197
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
from timeit import default_timer
2+
import torch.nn.functional as F
3+
from torch_geometric.data import DataLoader
4+
from src.utils.utilities import *
5+
from src.models.model_baseline import KernelGKN
6+
from src.data.data_processing import convert_data_to_mesh
7+
8+
################
9+
# MAIN PROGRAM #
10+
################
11+
12+
if __name__ == "__main__":
13+
########################################################################
14+
#
15+
# Hyperparameters
16+
#
17+
########################################################################
18+
19+
PATH = ""
20+
TRAIN_PATH = "/data/migus/mgkn_revamped/burgers_data_R10.mat"
21+
TEST_PATH = "/data/migus/mgkn_revamped/burgers_data_R10.mat"
22+
23+
r = 16
24+
s = 2 ** 13 // r
25+
K = s
26+
27+
n = s
28+
k = 2
29+
30+
m = [512]
31+
32+
radius_inner = [0.5 / 8]
33+
radius_inter = 0
34+
35+
batch_size = 1
36+
batch_size2 = 1
37+
38+
ntrain = 100
39+
ntest = 100
40+
41+
# rbf_sigma = 0.2
42+
43+
level = len(m)
44+
print("resolution", s)
45+
46+
width = 64
47+
ker_width = 256
48+
depth = 4
49+
edge_features = 4
50+
node_features = 2
51+
52+
epochs = 200
53+
init_gain = 0.8
54+
learning_rate = 0.0001
55+
scheduler_step = 10
56+
scheduler_gamma = 0.85
57+
58+
#######
59+
# GPU #
60+
#######
61+
62+
gpu = 1
63+
torch.cuda.set_device(gpu)
64+
print(f"Using GPU: {torch.cuda.current_device()}")
65+
66+
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
67+
print("Using device:", device)
68+
# if device=='cuda':
69+
# torch.cuda.set_device(0)
70+
torch.set_num_threads(1)
71+
72+
###############
73+
# RANDOM SEED for data generation #
74+
###############
75+
76+
RANDOM_SEED = 0
77+
78+
torch.backends.cudnn.deterministic = False
79+
np.random.seed(RANDOM_SEED)
80+
torch.manual_seed(RANDOM_SEED)
81+
torch.cuda.manual_seed_all(RANDOM_SEED)
82+
83+
################################################################
84+
# load data
85+
################################################################
86+
87+
runtime = np.zeros(2,)
88+
89+
t1 = default_timer()
90+
91+
reader = MatReader(TRAIN_PATH, device_cuda=gpu)
92+
train_a = reader.read_field("a")[:ntrain, ::r].reshape(ntrain, -1)
93+
train_u = reader.read_field("u")[:ntrain, ::r].reshape(ntrain, -1)
94+
95+
reader.load_file(TEST_PATH)
96+
test_a = reader.read_field("a")[-ntest:, ::r].reshape(ntest, -1)
97+
test_u = reader.read_field("u")[-ntest:, ::r].reshape(ntest, -1)
98+
99+
a_normalizer = GaussianNormalizer(train_a)
100+
train_a = a_normalizer.encode(train_a)
101+
test_a = a_normalizer.encode(test_a)
102+
103+
u_normalizer = UnitGaussianNormalizer(train_u)
104+
train_u = u_normalizer.encode(train_u)
105+
106+
data_train = convert_data_to_mesh(
107+
[train_a], train_u, ntrain, k, s, m, radius_inner, radius_inter
108+
)
109+
110+
data_test = convert_data_to_mesh(
111+
[test_a], test_u, ntest, k, s, m, radius_inner, radius_inter
112+
)
113+
print(data_test[0])
114+
# pdb.set_trace()
115+
train_loader = DataLoader(data_train, batch_size=batch_size, shuffle=True)
116+
test_loader = DataLoader(data_test, batch_size=batch_size2, shuffle=False)
117+
118+
########################################################################
119+
#
120+
# Training
121+
#
122+
########################################################################
123+
124+
RANDOM_SEED = 1
125+
126+
torch.backends.cudnn.deterministic = False
127+
np.random.seed(RANDOM_SEED)
128+
torch.manual_seed(RANDOM_SEED)
129+
torch.cuda.manual_seed_all(RANDOM_SEED)
130+
131+
t2 = default_timer()
132+
133+
print("preprocessing finished, time used:", t2 - t1)
134+
135+
# pdb.set_trace()
136+
model = KernelGKN(width, ker_width, depth, edge_features, node_features).cuda()
137+
138+
init_weights(model, init_type="orthogonal", init_gain=init_gain)
139+
140+
optimizer = torch.optim.Adam(
141+
model.parameters(), lr=learning_rate, weight_decay=5e-4
142+
)
143+
scheduler = torch.optim.lr_scheduler.StepLR(
144+
optimizer, step_size=scheduler_step, gamma=scheduler_gamma
145+
)
146+
147+
myloss = LpLoss(size_average=False)
148+
u_normalizer.to(device)
149+
model.train()
150+
for ep in range(epochs):
151+
t1 = default_timer()
152+
train_mse = 0.0
153+
train_l2 = 0.0
154+
for batch in train_loader:
155+
batch = batch.to(device)
156+
optimizer.zero_grad()
157+
158+
out = model(batch)
159+
mse = F.mse_loss(out.view(-1, 1), batch.y.view(-1, 1))
160+
161+
l2 = myloss(
162+
u_normalizer.decode(out.view(batch_size, -1),),
163+
u_normalizer.decode(batch.y.view(batch_size, -1),),
164+
)
165+
l2.backward()
166+
167+
optimizer.step()
168+
train_mse += mse.item()
169+
train_l2 += l2.item()
170+
171+
scheduler.step()
172+
t2 = default_timer()
173+
ttime_epoch = t2 - t1
174+
ttrain = train_l2 / (ntrain * k)
175+
176+
print(ep, t2 - t1, train_mse / len(train_loader), train_l2 / (ntrain * k))
177+
178+
runtime[0] = t2 - t1
179+
t1 = default_timer()
180+
model.eval()
181+
test_l2 = 0.0
182+
with torch.no_grad():
183+
for batch in test_loader:
184+
batch = batch.to(device)
185+
out = model(batch)
186+
out = u_normalizer.decode(out.view(batch_size2, -1),)
187+
test_l2 += myloss(out, batch.y.view(batch_size2, -1)).item()
188+
189+
ttest = test_l2 / ntest
190+
t2 = default_timer()
191+
print(ep, t2 - t1, test_l2 / ntest)
192+
193+
runtime[1] = t2 - t1
194+
model_total_params = sum(p.numel() for p in model.parameters())
195+
model_trainable_params = sum(
196+
p.numel() for p in model.parameters() if p.requires_grad
197+
)

0 commit comments

Comments
 (0)