pycsamt.ai.nets.drcnn#

DRCNNNet — Dense Residual CNN for joint / multi-modal EM inversion.

Adapts the Dense-Residual Convolutional Neural Network architecture of Guo et al. (2021) to the general case of fusing two or more 1-D EM datasets (e.g., AMT + TEM, MT + gravity) into a single subsurface model prediction.

Architecture#

Each modality is encoded by an independent 1-D dense block. Dense blocks use DenseNet-style growth: every sub-layer receives the concatenation of all previous sub-layer outputs plus the original input. A residual shortcut connects the block input to its output so the decoder sees both a bottleneck and the original features.

After encoding, features from all modalities are concatenated and processed by a shared fusion dense block, followed by a linear output head.

\[\mathbf{h}_k^{(l)} = \sigma\bigl( W_k^{(l)} [\mathbf{x}_k; \mathbf{h}_k^{(1)}; \ldots; \mathbf{h}_k^{(l-1)}] \bigr)\]

where \(k\) indexes the modality and \(l\) indexes the dense-block sub-layer.

References

Guo R. et al. (2021) IEEE TGRS — DRCNN for joint AMT+seismic.

Classes

DRCNNNet(n_features_list, n_out, *[, ...])

Factory wrapper for the Dense Residual CNN.

class pycsamt.ai.nets.drcnn.DRCNNNet(n_features_list, n_out, *, growth_rate=32, n_layers=6, hidden_dim=256, dropout=0.2)[source]#

Bases: object

Factory wrapper for the Dense Residual CNN.

Parameters:
  • n_features_list (sequence of int) – Feature vector length for each input modality. E.g. (120, 48) for 120 MT features and 48 seismic features.

  • n_out (int) – Output dimension (number of subsurface parameters to predict).

  • growth_rate (int, default 32) – New channels added by each sub-layer in a dense block.

  • n_layers (int, default 6) – Number of sub-layers per dense block.

  • hidden_dim (int, default 256) – Dimension of the encoded representation from each modality and the fusion block output.

  • dropout (float, default 0.2)

Examples

>>> # MT (120 features) + TEM (48 features)
>>> drcnn = DRCNNNet((120, 48), n_out=9)
>>> model = drcnn.build()
build()[source]#

Instantiate and return the nn.Module.

Return type:

Any