File size: 3,211 Bytes
07a5280
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
paper:
  title: "Fourier Neural Operator for Parametric Partial Differential Equations"
  arxiv: "2010.08895"
  experiment: "FNO-2D Navier-Stokes, nu=1e-5, T=20"
  viscosity: 1.0e-5
  reference_relative_l2: 0.1556
  reference_parameter_count: 414517
  reference_epoch_seconds_v100: 127.80

data:
  root: "/public/share/sugonhpcapp01/onestore/onedatasets/FNO_data"
  file: "NavierStokes_V1e-5_N1200_T20.mat"
  key: "u"
  layout: "N,H,W,T"
  dtype: "float32"
  expected_shape: [1200, 64, 64, 20]
  resolution: [64, 64]
  ntrain: 1000
  ntest: 200
  train_start: 0
  test_start: 1000
  history: 10
  horizon: 10
  recording_interval: 1.0
  future_times: [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
  normalization: "none"

model:
  name: "FNO2d"
  input_channels: 10
  output_channels: 1
  use_grid: true
  grid_channels: 2
  grid_include_endpoint: false
  width: 32
  modes1: 12
  modes2: 12
  num_layers: 4
  projection_width: 128
  activation: "relu"
  normalization: "batch_norm"
  block_order: "relu(batch_norm(spectral_plus_pointwise))"
  fft_norm: "backward"
  spectral_init: "scaled_uniform_complex"

training:
  epochs: 500
  batch_size: 20
  optimizer: "adam"
  learning_rate: 0.001
  weight_decay: 0.0
  scheduler: "step_lr"
  scheduler_step_size: 100
  scheduler_gamma: 0.5
  seed: 0
  dtype: "float32"
  amp: false
  gradient_clipping: null
  ema: false
  distributed: "single"
  num_workers: 0
  pin_memory: true
  deterministic: true
  relative_l2_epsilon: 1.0e-12
  train_rollout_steps: 10
  evaluation_rollout_steps: 10
  checkpoint_monitor: "train_full_relative_l2"
  checkpoint_mode: "min"
  evaluate_test_every_epoch: true

inference:
  batch_size: 20
  seed: 0
  dtype: "float32"
  rollout_steps: 10

paths:
  checkpoint: "weight/best_model.pth"
  results_dir: "results"
  train_history: "results/train_history.json"
  predictions: "results/predictions.npz"
  metrics: "results/metrics.json"
  per_sample_metrics: "results/per_sample_metrics.csv"
  training_curves: "results/training_curves.png"
  rollout_figure: "results/sample_000_rollout.png"
  run_metadata: "results/run_metadata.json"
  summary: "results/summary.md"

assumptions:
  - "The paper does not specify a validation split; the best checkpoint is selected using train full-trajectory relative L2, never test error."
  - "The paper does not specify batch size or seed; batch_size=20 and seed=0 are explicit engineering assumptions."
  - "The paper does not define the exact relative-L2 reduction; ratios are computed per sample and then averaged with epsilon=1e-12."
  - "The paper does not specify the projection hidden width; projection_width=128 is configurable."
  - "Coordinate-grid input is configurable and enabled; the periodic grid excludes the duplicated endpoint."
  - "The block ordering is ReLU(BatchNorm(spectral + pointwise)); the paper states ReLU and batch normalization but not their exact order."
  - "Adam uses weight_decay=0.0 because the paper does not state an additional weight-decay regularizer."

conflicts:
  - "The paper states d_v=32 but reports 414,517 parameters without enough connection details to reproduce both uniquely. Width 32 takes precedence and the actual parameter count must be reported."