pycsamt.ai.training.metrics#

Evaluation metrics for 1-D EM inversion networks.

All functions accept numpy arrays and ignore NaN entries (corresponding to padding in variable-depth datasets).

Metrics#

rmse Root mean square error on log₁₀(ρ). mae Mean absolute error. r2 Coefficient of determination R². relative_rmse RMSE normalised by |y_true|. depth_rmse RMSE weighted by inverse depth (shallower layers

are easier to recover and receive less weight).

layer_rmse Per-layer RMSE vector.

Functions

depth_rmse(y_true, y_pred, n_layers, *[, ...])

RMSE on the resistivity sub-vector only (first n_layers columns), optionally weighted by layer index so that deeper (harder) layers have less influence on the score.

layer_rmse(y_true, y_pred)

Per-column RMSE vector.

mae(y_true, y_pred)

Mean absolute error, ignoring NaN.

masked_mse_loss(pred, target)

MSE loss that ignores NaN (padding) entries in target.

r2(y_true, y_pred)

Coefficient of determination R², ignoring NaN.

relative_rmse(y_true, y_pred)

Normalised RMSE: sqrt(mean((y_true - y_pred)² / y_true²)).

rmse(y_true, y_pred)

Root mean square error, ignoring NaN.

summarise(y_true, y_pred[, n_layers])

Compute all scalar metrics and return as a dict.

torch_isfinite(t)

Return a bool mask without importing torch at module level.

pycsamt.ai.training.metrics.rmse(y_true, y_pred)[source]#

Root mean square error, ignoring NaN.

Operates element-wise on y_true and y_pred. Both arrays are assumed to be in log₁₀(Ω·m) or normalised space.

Parameters:
Return type:

float

pycsamt.ai.training.metrics.mae(y_true, y_pred)[source]#

Mean absolute error, ignoring NaN.

Parameters:
Return type:

float

pycsamt.ai.training.metrics.r2(y_true, y_pred)[source]#

Coefficient of determination R², ignoring NaN.

Parameters:
Return type:

float

pycsamt.ai.training.metrics.relative_rmse(y_true, y_pred)[source]#

Normalised RMSE: sqrt(mean((y_true - y_pred)² / y_true²)).

Useful when comparing models with very different resistivity ranges.

Parameters:
Return type:

float

pycsamt.ai.training.metrics.depth_rmse(y_true, y_pred, n_layers, *, depth_weight=True)[source]#

RMSE on the resistivity sub-vector only (first n_layers columns), optionally weighted by layer index so that deeper (harder) layers have less influence on the score.

Parameters:
Return type:

float

pycsamt.ai.training.metrics.layer_rmse(y_true, y_pred)[source]#

Per-column RMSE vector.

Returns:

rmse_per_col – RMSE for each parameter column independently.

Return type:

ndarray, shape (n_params,)

Parameters:
pycsamt.ai.training.metrics.masked_mse_loss(pred, target)[source]#

MSE loss that ignores NaN (padding) entries in target.

Parameters:
  • pred (torch.Tensor, shape (batch, n_out))

  • target (torch.Tensor, shape (batch, n_out))

Returns:

loss

Return type:

torch.Tensor (scalar)

pycsamt.ai.training.metrics.summarise(y_true, y_pred, n_layers=None)[source]#

Compute all scalar metrics and return as a dict.

Returns:

metrics'rmse', 'mae', 'r2', 'relative_rmse', 'depth_rmse' (if n_layers given).

Return type:

dict with keys

Parameters: