Benchmarking the different inversion methods

import sys
sys.path.append('../src')
import time
import numpy as np
import matplotlib.pyplot as plt
from emagpy import Problem

datadir = '../src/examples/'
timings = {}
k = Problem()
k.createSurvey(datadir + 'cover-crop/coverCropTransect.csv')
k.filterRange(vmax=50)
k.show()
k.setInit(depths0=np.linspace(0.1, 2, 10))
2/30 data removed (filterRange).
../_images/nb_benchmark_0.png
t0 = time.time()
k.invert(forwardModel='CSgn')
timings['CSgn'] = [time.time() - t0, np.mean(k.misfits[0])]

t0 = time.time()
k.invert(forwardModel='CS', method='L-BFGS-B', regularization='l2')
timings['CS-L-BFGS-B'] = [time.time() - t0, np.mean(k.misfits[0])]

t0 = time.time()
k.invert(forwardModel='CS', method='Gauss-Newton', regularization='l2')
timings['CS-GN'] = [time.time() - t0, np.mean(k.misfits[0])]
Survey 1/1
28/28 inverted
28/28 invertedSurvey 1/1
28/28 inverted
k.surveys[0].df = k.surveys[0].df[:4]

t0 = time.time()
k.invert(forwardModel='FSlin', method='L-BFGS-B', regularization='l2', njobs=-1)
timings['FSlin-L-BFGS-B'] = [time.time() - t0, np.mean(k.misfits[0])]

t0 = time.time()
k.invert(forwardModel='FSlin', method='Gauss-Newton', regularization='l2')
timings['FSlin-GN'] = [time.time() - t0, np.mean(k.misfits[0])]
100%|██████████| 4/4 [00:13<00:00,  3.44s/it]
4/4 inverted
t0 = time.time()
k.invert(forwardModel='FSeq', method='L-BFGS-B', regularization='l2', njobs=-1)
timings['FSeq-L-BFGS-B'] = [time.time() - t0, np.mean(k.misfits[0])]
100%|██████████| 4/4 [00:32<00:00,  8.01s/it]
t0 = time.time()
k.invert(forwardModel='FSeq', method='Gauss-Newton', regularization='l2')
timings['FSeq-GN'] = [time.time() - t0, np.mean(k.misfits[0])]
4/4 inverted
for key in timings:
    print('{:15s}: {:2.3f} s, RRMSE {:2.2f} %'.format(key, *timings[key]))
CSgn           : 0.022 s, RRMSE 9.32 %
CS-L-BFGS-B    : 2.217 s, RRMSE 8.81 %
CS-GN          : 0.024 s, RRMSE 9.32 %
FSlin-L-BFGS-B : 13.804 s, RRMSE 4.05 %
FSlin-GN       : 0.691 s, RRMSE 4.27 %
FSeq-L-BFGS-B  : 32.156 s, RRMSE 29.51 %
FSeq-GN        : 1.438 s, RRMSE 3.88 %

Timing, depends on the type of forward model, the method chosen and the number of parameters of the model (number of layers and depths).

Download python script: nb_benchmark.py

Download Jupyter notebook: nb_benchmark.ipynb

View the notebook in the Jupyter nbviewer

Run this example interactively: binder