Skip to content

Commit

Permalink
Restructure project.
Browse files Browse the repository at this point in the history
  • Loading branch information
samuelburbulla committed Nov 18, 2023
1 parent 0a24ae1 commit 0c5fa78
Show file tree
Hide file tree
Showing 13 changed files with 105 additions and 30 deletions.
2 changes: 2 additions & 0 deletions data/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
*.csv
*.dat
2 changes: 2 additions & 0 deletions data/flame/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Dataset from [2023 FLAME AI
Challenge](https://www.kaggle.com/competitions/2023-flame-ai-challenge/data).
Empty file added src/continuity/__init__.py
Empty file.
Empty file added src/continuity/data/__init__.py
Empty file.
2 changes: 1 addition & 1 deletion data.py → src/continuity/data/dataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from typing import List, Optional
import pandas as pd
import torch
from model import device
from continuity.model.model import device

def tensor(x):
return torch.tensor(x, dtype=torch.float32)
Expand Down
55 changes: 55 additions & 0 deletions src/continuity/data/flame.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import numpy as np
import pandas as pd
from continuity.data.dataset import DataSet, Sensor, Observation


class Flame(DataSet):
"""Turbulent flow samples from flame dataset"""

def __init__(self, size, batch_size):
self.num_sensors = 16 * 16
self.size = size

self.coordinate_dim = 2
self.num_channels = 1

# Generate observations
observations = [
self._generate_observation(i)
for i in range(self.size)
]

super().__init__(observations, batch_size)

def _generate_observation(self, i: int):
# Load data
input_path = 'flame/'
res = 'LR'

df = pd.read_csv(input_path + 'train.csv')
data_path = input_path + f"flowfields/{res}/train"

filename = df[f'ux_filename'][i+1]
u = np.fromfile(
data_path + "/" + filename, dtype="<f4"
).reshape(16, 16, 1)

# Normalize
u = (u - u.mean()) / u.std()

# Positions
x = np.stack(
np.meshgrid(
np.linspace(-1, 1, 16),
np.linspace(-1, 1, 16),
),
axis=2
)

# Sensors
sensors = [
Sensor(x[i][j], u[i][j])
for i in range(16) for j in range(16)
]
return Observation(sensors)

32 changes: 32 additions & 0 deletions src/continuity/data/sine.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import numpy as np
import pandas as pd
from continuity.data.dataset import DataSet, Sensor, Observation


class SineWaves(DataSet):
"""Sine waves"""

def __init__(self, num_sensors, size, batch_size):
self.num_sensors = num_sensors
self.size = size

self.coordinate_dim = 1
self.num_channels = 1

# Generate observations
observations = [
self._generate_observation(i / max(1, self.size-1))
for i in range(self.size)
]

super().__init__(observations, batch_size)

def _generate_observation(self, i: int):
x = np.linspace(-1, 1, self.num_sensors)
u = np.sin((1+i) * np.pi * x)
sensors = [
Sensor(np.array([x]), np.array([u]))
for x, u in zip(x, u)
]
return Observation(sensors)

Empty file.
File renamed without changes.
Empty file.
2 changes: 1 addition & 1 deletion plotting.py → src/continuity/plotting/plotting.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import io
import numpy as np
import matplotlib.pyplot as plt
from model import device
from continuity.model.model import device


def plot_observation(observation, ax=plt.gca()):
Expand Down
1 change: 1 addition & 0 deletions tests/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
runs/
39 changes: 11 additions & 28 deletions main.py → tests/sine.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import torch
import matplotlib.pyplot as plt
from data import SineWaves, Flame
from plotting import *
from model import FullyConnected, DeepONet, NeuralOperator
from dadaptation import DAdaptSGD
from continuity.data.sine import SineWaves
from continuity.plotting.plotting import *
from continuity.model.model import NeuralOperator
from torch.utils.tensorboard import SummaryWriter

# Set random seed
Expand All @@ -14,33 +13,18 @@ def main():
size = 4

# Create data set
dataset = SineWaves(32, size, batch_size=32)
# dataset = Flame(size, batch_size=1)
dataset = SineWaves(
num_sensors=32,
size=size,
batch_size=32,
)

# Create model
# model = FullyConnected(
# coordinate_dim=dataset.coordinate_dim,
# num_channels=dataset.num_channels,
# num_sensors=dataset.num_sensors,
# width=128,
# depth=128,
# )
# model = DeepONet(
# coordinate_dim=dataset.coordinate_dim,
# num_channels=dataset.num_channels,
# num_sensors=dataset.num_sensors,
# branch_width=32,
# branch_depth=4,
# trunk_width=128,
# trunk_depth=32,
# basis_functions=4,
# )
model = NeuralOperator(
coordinate_dim=dataset.coordinate_dim,
num_channels=dataset.num_channels,
depth=1,
kernel_width=128,
kernel_depth=32,
kernel_width=32,
kernel_depth=8,
)

# Load model
Expand All @@ -50,13 +34,12 @@ def main():
model.load_state_dict(torch.load(f'{log_dir}/model_weights.pth'))

# Train model
epochs = 10000
epochs = 100
writer = SummaryWriter()

train = True
if train:
# Setup optimizer and fit model
# optimizer = DAdaptSGD(model.parameters(), lr=0.1)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
criterion = torch.nn.MSELoss()

Expand Down

0 comments on commit 0c5fa78

Please sign in to comment.