pycsamt.ai.nets.unet#

UNet2DNet — 2-D U-Net architecture for EM section inversion.

Based on the encoder-decoder with skip connections introduced by Ronneberger et al. (2015) and adapted for 2-D CSEM / MT inversion by Oh et al. (2019, 2020).

The network maps a 2-D observed data panel

\[\mathbf{D} \in \mathbb{R}^{C_{\text{in}} \times N_f \times N_s}\]

(components x frequencies x stations) to a 2-D subsurface resistivity section

\[\hat{\boldsymbol{\rho}} \in \mathbb{R}^{1 \times N_z \times N_s}\]

(depth x stations). Both spatial dimensions may differ between input and output; bilinear upsampling handles the mismatch.

References

Oh S. et al. (2019) Geophysics — 2D CSEM inversion with U-Net. Oh S. et al. (2020) JGR Solid Earth — generalisation to salt.

Classes

UNet2DNet(n_in[, n_out, channels, dropout])

Factory wrapper for the 2-D U-Net.

class pycsamt.ai.nets.unet.UNet2DNet(n_in, n_out=1, *, channels=(32, 64, 128, 256, 512), dropout=0.2)[source]#

Bases: object

Factory wrapper for the 2-D U-Net.

All heavy imports are deferred to build().

Parameters:
  • n_in (int) – Input channels — typically n_components (e.g. 4 for off-diagonal MT impedance: log|Zxy|, phi_xy, log|Zyx|, phi_yx).

  • n_out (int) – Output channels — 1 for a single \(\\log_{10}(\\rho)\) section.

  • channels (tuple of int, default) – (32, 64, 128, 256, 512) Channel widths at each encoder stage plus the bridge. len(channels) - 1 determines the number of pooling/upsampling stages.

  • dropout (float, default 0.2) – 2-D spatial dropout probability in each convolutional block.

Examples

>>> net = UNet2DNet(n_in=4, n_out=1)
>>> model = net.build()
build()[source]#

Instantiate and return the nn.Module.

Return type:

Any