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).

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