pycsamt.ai.inversion.joint#

JointInverter — multi-modal / multi-physics joint inversion.

Uses the DRCNNNet architecture to fuse two or more EM datasets (or EM + non-EM methods) into a single subsurface model prediction.

Supported combinations#

  • MT + TEM — complementary depth sensitivity

  • MT + CSAMT — frequency overlap to constrain near-surface

  • MT + gravity or seismic — cross-property constraints

Joint training#

All modalities must be observed at the same sites. Use generate_dataset() with different solver values and the same LayeredModel to generate correlated synthetic datasets for supervised training.

Example

>>> from pycsamt.ai.inversion import JointInverter
>>> inv = JointInverter(n_features_list=(120, 48), n_layers=5)
>>> inv.fit([X_mt, X_tem], y, epochs=50)
JointInverter(modalities=2, fitted)
>>> y_pred = inv.predict([X_mt_test, X_tem_test])

Classes

JointInverter(n_features_list[, n_layers, ...])

Multi-modal joint inversion estimator based on DRCNN.

class pycsamt.ai.inversion.joint.JointInverter(n_features_list, n_layers=5, *, growth_rate=32, n_dense_layers=6, hidden_dim=256, dropout=0.2, device=None, log_thickness=True, **net_kwargs)[source]#

Bases: BaseEMNet

Multi-modal joint inversion estimator based on DRCNN.

Parameters:
  • n_features_list (sequence of int) – Feature vector lengths for each modality. E.g. (120, 48) for two modalities.

  • n_layers (int, default 5) – Number of earth layers to invert for.

  • growth_rate (int, default 32) – Dense block growth rate.

  • n_dense_layers (int, default 6) – Sub-layers per dense block.

  • hidden_dim (int, default 256) – Encoded-feature dimension for each modality and fusion stage.

  • dropout (float, default 0.2)

  • device (str or None)

  • log_thickness (bool, default True) – Apply log₁₀ transform to thickness targets before normalisation.

  • **net_kwargs – Forwarded to DRCNNNet.

fit(X_list, y, *, epochs=100, batch_size=256, lr=0.001, patience=20, val_frac=0.1, grad_clip=1.0, seed=None, verbose=True)[source]#

Train the joint inverter.

Parameters:
  • X_list (list of ndarray) – Feature matrices for each modality, each (n_samples, n_features_i). Lengths must match.

  • y (ndarray (n_samples, 2*n_layers-1)) – Target model parameters: first n_layers columns are log₁₀(ρ) or ρ; last n_layers-1 columns are thicknesses.

  • epochs (int) – Standard training hyper-parameters.

  • batch_size (int) – Standard training hyper-parameters.

  • lr (float) – Standard training hyper-parameters.

  • patience (int) – Standard training hyper-parameters.

  • val_frac (float) – Standard training hyper-parameters.

  • grad_clip (float | None) – Standard training hyper-parameters.

  • seed (int | None) – Standard training hyper-parameters.

  • verbose (bool) – Standard training hyper-parameters.

Return type:

self

predict(X_list, *, as_log_rho=True)[source]#

Predict subsurface model parameters.

Parameters:
  • X_list (list of ndarray, each (n_samples, n_features_i))

  • as_log_rho (bool) – If True (default), resistivity columns are returned in log₁₀(ρ); otherwise linear.

Returns:

y_pred

Return type:

ndarray (n_samples, 2*n_layers-1)