device=cuda rows=13163 split=manifest train=9214 val=1974 test=1975
target mean=67.945 MPa std=49.378 MPa
fitted input standardization: mortar nodes/globals, mesoscale globals, ITZ mix vector
supervised train rows -> mortar: 3640  ITZ: 26  paste: 397  tensile: 902  flexural: 1345
[hierarchical] epoch=001 train_loss=1.4884 val_rmse=17.356 val_r2=0.876 mortar_mse=0.4075 itz_mse=4.3484 itz_prior=0.0000 paste_mse=0.6222 paste>=conc=0.0341 paste_shape=1.3284 tens_mse=0.4565 flex_mse=0.4331 mono=0.4433 itz_wb=0.0000 poro_order=0.0008 pm_cons=0.0324 itz_ratio=0.0205
[hierarchical] epoch=024 train_loss=0.2824 val_rmse=12.081 val_r2=0.940 mortar_mse=0.0882 itz_mse=3.2335 itz_prior=0.0000 paste_mse=0.2389 paste>=conc=0.0039 paste_shape=0.0000 tens_mse=0.1180 flex_mse=0.0769 mono=0.0050 itz_wb=0.0000 poro_order=0.0005 pm_cons=0.0094 itz_ratio=0.0014
[hierarchical] epoch=048 train_loss=0.2198 val_rmse=11.035 val_r2=0.950 mortar_mse=0.0532 itz_mse=3.2504 itz_prior=0.0000 paste_mse=0.2036 paste>=conc=0.0029 paste_shape=0.0000 tens_mse=0.0778 flex_mse=0.0416 mono=0.0055 itz_wb=0.0000 poro_order=0.0004 pm_cons=0.0118 itz_ratio=0.0012
[hierarchical] epoch=072 train_loss=0.1872 val_rmse=10.717 val_r2=0.953 mortar_mse=0.0368 itz_mse=3.1798 itz_prior=0.0000 paste_mse=0.1837 paste>=conc=0.0027 paste_shape=0.0001 tens_mse=0.0715 flex_mse=0.0265 mono=0.0054 itz_wb=0.0000 poro_order=0.0003 pm_cons=0.0083 itz_ratio=0.0008
[hierarchical] epoch=096 train_loss=0.1600 val_rmse=10.266 val_r2=0.956 mortar_mse=0.0276 itz_mse=3.2083 itz_prior=0.0000 paste_mse=0.1551 paste>=conc=0.0022 paste_shape=0.0000 tens_mse=0.0500 flex_mse=0.0191 mono=0.0046 itz_wb=0.0000 poro_order=0.0003 pm_cons=0.0082 itz_ratio=0.0009
[hierarchical] epoch=120 train_loss=0.1432 val_rmse=10.569 val_r2=0.954 mortar_mse=0.0198 itz_mse=3.1654 itz_prior=0.0000 paste_mse=0.1488 paste>=conc=0.0018 paste_shape=0.0000 tens_mse=0.0272 flex_mse=0.0134 mono=0.0049 itz_wb=0.0000 poro_order=0.0002 pm_cons=0.0067 itz_ratio=0.0006
[hierarchical] test_rmse=10.691 test_mae=7.313 test_r2=0.953
[hierarchical] test mortar_compressive RMSE=13.376 MPa over 765 supervised rows
[hierarchical] test tensile RMSE=1.996 MPa  R2=0.887  over 195 supervised rows
[hierarchical] test flexural RMSE=3.204 MPa  R2=0.926  over 303 supervised rows
[hierarchical] checkpoint saved to outputs/checkpoints_compgain\hierarchical.pt
[hierarchical] per-epoch history saved to outputs/checkpoints_compgain\training_history_hierarchical.csv
[tabular_ann] epoch=001 train_loss=0.6049 val_rmse=22.460 val_r2=0.792 tens_mse=0.4488 flex_mse=0.3629 mono=0.0808
[tabular_ann] epoch=024 train_loss=0.1481 val_rmse=15.736 val_r2=0.898 tens_mse=0.1302 flex_mse=0.1071 mono=0.0056
[tabular_ann] epoch=048 train_loss=0.1237 val_rmse=13.321 val_r2=0.927 tens_mse=0.1282 flex_mse=0.0707 mono=0.0060
[tabular_ann] epoch=072 train_loss=0.1117 val_rmse=13.330 val_r2=0.927 tens_mse=0.1125 flex_mse=0.0773 mono=0.0050
[tabular_ann] epoch=096 train_loss=0.1017 val_rmse=15.308 val_r2=0.903 tens_mse=0.0946 flex_mse=0.0626 mono=0.0059
[tabular_ann] epoch=120 train_loss=0.0932 val_rmse=13.278 val_r2=0.927 tens_mse=0.0746 flex_mse=0.0617 mono=0.0052
[tabular_ann] test_rmse=13.139 test_mae=9.062 test_r2=0.929
[tabular_ann] test tensile RMSE=2.094 MPa  R2=0.875  over 195 supervised rows
[tabular_ann] test flexural RMSE=3.825 MPa  R2=0.895  over 303 supervised rows
[tabular_ann] checkpoint saved to outputs/checkpoints_compgain\tabular_ann.pt
[tabular_ann] per-epoch history saved to outputs/checkpoints_compgain\training_history_tabular_ann.csv

Summary
model                RMSE      MAE       R2
hierarchical       10.691    7.313    0.953
tabular_ann        13.139    9.062    0.929

Checkpoints
hierarchical     outputs/checkpoints_compgain\hierarchical.pt
tabular_ann      outputs/checkpoints_compgain\tabular_ann.pt

Figures saved under outputs/figures_compgain:
  real_data_parity.png             (78.9 KB)
  real_data_r2.png                 (26.0 KB)
  real_data_training_curves.png    (128.6 KB)
  real_data_example_rve.png        (52.4 KB)
