Convolutional Dictionary Learning

This example demonstrating the use of dictlrn.DictLearn to construct a dictionary learning algorithm with the flexibility of choosing the sparse coding and dictionary update classes. In this case they are cbpdn.ConvBPDNGradReg and admm.ccmod.ConvCnstrMOD respectively, so the resulting dictionary learning algorithm is not equivalent to dictlrn.cbpdndl.ConvBPDNDictLearn. Sparse coding with a CBPDN variant that includes a gradient regularization term on one of the coefficient maps [52] enables CDL without the need for the usual lowpass/highpass filtering as a pre-processing of the training images.

from __future__ import division
from __future__ import print_function
from builtins import input

import pyfftw   # See https://github.com/pyFFTW/pyFFTW/issues/40
import numpy as np

from sporco.admm import cbpdn
from sporco.admm import ccmod
from sporco.dictlrn import dictlrn
from sporco import cnvrep
from sporco import util
from sporco import plot
plot.config_notebook_plotting()

Load training images.

exim = util.ExampleImages(scaled=True, zoom=0.5, gray=True)
img1 = exim.image('barbara.png', idxexp=np.s_[10:522, 100:612])
img2 = exim.image('kodim23.png', idxexp=np.s_[:, 60:572])
img3 = exim.image('monarch.png', idxexp=np.s_[:, 160:672])
S = np.stack((img1, img2, img3), axis=2)

Construct initial dictionary.

np.random.seed(12345)
D0 = np.random.randn(8, 8, 64)

Construct object representing problem dimensions.

cri = cnvrep.CDU_ConvRepIndexing(D0.shape, S)

Set up weights for the \(\ell_1\) norm to disable regularization of the coefficient map corresponding to the impulse filter.

wl1 = np.ones((1,)*4 + (D0.shape[2:]), dtype=np.float32)
wl1[..., 0] = 0.0

Set of weights for the \(\ell_2\) norm of the gradient to disable regularization of all coefficient maps except for the one corresponding to the impulse filter.

wgr = np.zeros((D0.shape[2]), dtype=np.float32)
wgr[0] = 1.0

Define X and D update options.

lmbda = 0.1
mu = 0.5
optx = cbpdn.ConvBPDNGradReg.Options({'Verbose': False, 'MaxMainIter': 1,
            'rho': 20.0*lmbda + 0.5, 'AutoRho': {'Period': 10,
            'AutoScaling': False, 'RsdlRatio': 10.0, 'Scaling': 2.0,
            'RsdlTarget': 1.0}, 'HighMemSolve': True, 'AuxVarObj': False,
            'L1Weight': wl1, 'GradWeight': wgr})
optd = ccmod.ConvCnstrMODOptions({'Verbose': False, 'MaxMainIter': 1,
            'rho': 5.0*cri.K, 'AutoRho': {'Period': 10, 'AutoScaling': False,
            'RsdlRatio': 10.0, 'Scaling': 2.0, 'RsdlTarget': 1.0}},
            method='cns')

Normalise dictionary according to dictionary Y update options.

D0n = cnvrep.Pcn(D0, D0.shape, cri.Nv, dimN=2, dimC=0, crp=True,
                 zm=optd['ZeroMean'])

Update D update options to include initial values for Y and U.

optd.update({'Y0': cnvrep.zpad(cnvrep.stdformD(D0n, cri.Cd, cri.M), cri.Nv),
             'U0': np.zeros(cri.shpD + (cri.K,))})

Create X update object.

xstep = cbpdn.ConvBPDNGradReg(D0n, S, lmbda, mu, optx)

Create D update object.

dstep = ccmod.ConvCnstrMOD(None, S, D0.shape, optd, method='cns')

Create DictLearn object and solve.

opt = dictlrn.DictLearn.Options({'Verbose': True, 'MaxMainIter': 200})
d = dictlrn.DictLearn(xstep, dstep, opt)
D1 = d.solve()
print("DictLearn solve time: %.2fs" % d.timer.elapsed('solve'), "\n")
Itn   FncX      r_X       s_X       ρ_X       FncD      r_D       s_D       ρ_D
------------------------------------------------------------------------------------
   0  7.30e+03  9.76e-01  1.03e-01  2.50e+00  1.64e+04  3.28e-01  2.20e-01  1.50e+01
   1  4.09e+03  4.54e-01  1.19e+00  2.50e+00  3.64e+04  3.86e-01  1.21e-01  1.50e+01
   2  5.30e+03  4.28e-01  8.99e-01  2.50e+00  6.12e+03  3.89e-01  1.71e-01  1.50e+01
   3  3.28e+03  3.40e-01  4.64e-01  2.50e+00  3.14e+03  3.67e-01  8.04e-02  1.50e+01
   4  2.01e+03  3.82e-01  6.02e-01  2.50e+00  8.88e+02  3.30e-01  8.14e-02  1.50e+01
   5  3.21e+03  3.96e-01  3.82e-01  2.50e+00  3.12e+03  2.64e-01  6.81e-02  1.50e+01
   6  2.44e+03  2.80e-01  3.85e-01  2.50e+00  5.56e+02  2.20e-01  6.41e-02  1.50e+01
   7  1.58e+03  1.95e-01  4.71e-01  2.50e+00  1.53e+03  1.81e-01  5.54e-02  1.50e+01
   8  2.52e+03  1.91e-01  1.82e-01  2.50e+00  1.22e+03  1.53e-01  5.40e-02  1.50e+01
   9  1.02e+03  1.78e-01  4.42e-01  2.50e+00  3.93e+02  1.29e-01  5.43e-02  1.50e+01
  10  1.90e+03  1.96e-01  1.88e-01  2.50e+00  1.12e+03  1.08e-01  5.47e-02  1.50e+01
  11  1.22e+03  1.37e-01  2.97e-01  2.50e+00  1.35e+02  9.16e-02  5.27e-02  1.50e+01
  12  1.39e+03  1.17e-01  2.27e-01  2.50e+00  7.79e+02  7.76e-02  5.40e-02  1.50e+01
  13  1.23e+03  1.10e-01  1.93e-01  2.50e+00  1.42e+02  6.67e-02  5.32e-02  1.50e+01
  14  9.07e+02  1.05e-01  2.29e-01  2.50e+00  4.18e+02  5.72e-02  5.05e-02  1.50e+01
  15  1.13e+03  9.59e-02  1.15e-01  2.50e+00  1.35e+02  5.12e-02  4.79e-02  1.50e+01
  16  6.80e+02  7.06e-02  1.87e-01  2.50e+00  2.43e+02  4.53e-02  4.47e-02  1.50e+01
  17  9.34e+02  7.06e-02  8.33e-02  2.50e+00  1.12e+02  4.06e-02  4.21e-02  1.50e+01
  18  5.22e+02  5.91e-02  1.50e-01  2.50e+00  1.52e+02  3.71e-02  4.21e-02  1.50e+01
  19  7.61e+02  5.80e-02  6.45e-02  2.50e+00  8.39e+01  3.41e-02  4.20e-02  1.50e+01
  20  4.60e+02  4.38e-02  1.14e-01  2.50e+00  1.06e+02  3.17e-02  4.10e-02  1.50e+01
  21  6.14e+02  4.26e-02  5.37e-02  2.50e+00  6.32e+01  2.94e-02  4.07e-02  1.50e+01
  22  4.28e+02  3.60e-02  8.19e-02  2.50e+00  8.21e+01  2.74e-02  4.03e-02  1.50e+01
  23  4.92e+02  3.35e-02  5.20e-02  2.50e+00  5.06e+01  2.57e-02  3.93e-02  1.50e+01
  24  4.16e+02  2.86e-02  5.83e-02  2.50e+00  6.41e+01  2.40e-02  3.78e-02  1.50e+01
  25  3.95e+02  2.55e-02  4.80e-02  2.50e+00  4.52e+01  2.23e-02  3.61e-02  1.50e+01
  26  3.94e+02  2.41e-02  3.89e-02  2.50e+00  5.30e+01  2.11e-02  3.46e-02  1.50e+01
  27  3.22e+02  2.03e-02  4.41e-02  2.50e+00  4.40e+01  1.99e-02  3.32e-02  1.50e+01
  28  3.58e+02  1.95e-02  2.84e-02  2.50e+00  4.60e+01  1.87e-02  3.20e-02  1.50e+01
  29  2.82e+02  1.65e-02  3.44e-02  2.50e+00  4.52e+01  1.77e-02  3.14e-02  1.50e+01
  30  3.18e+02  1.63e-02  2.52e-02  2.50e+00  4.41e+01  1.69e-02  3.08e-02  1.50e+01
  31  2.76e+02  1.48e-02  2.95e-02  2.50e+00  4.38e+01  1.61e-02  3.01e-02  1.50e+01
  32  2.82e+02  1.36e-02  2.27e-02  2.50e+00  4.24e+01  1.51e-02  2.93e-02  1.50e+01
  33  2.74e+02  1.29e-02  2.16e-02  2.50e+00  4.26e+01  1.44e-02  2.84e-02  1.50e+01
  34  2.58e+02  1.23e-02  2.33e-02  2.50e+00  4.12e+01  1.38e-02  2.74e-02  1.50e+01
  35  2.64e+02  1.17e-02  1.96e-02  2.50e+00  4.09e+01  1.32e-02  2.65e-02  1.50e+01
  36  2.48e+02  1.10e-02  1.93e-02  2.50e+00  4.09e+01  1.25e-02  2.56e-02  1.50e+01
  37  2.49e+02  1.07e-02  1.88e-02  2.50e+00  4.05e+01  1.20e-02  2.48e-02  1.50e+01
  38  2.43e+02  1.02e-02  1.82e-02  2.50e+00  4.05e+01  1.15e-02  2.41e-02  1.50e+01
  39  2.38e+02  9.67e-03  1.68e-02  2.50e+00  4.05e+01  1.10e-02  2.35e-02  1.50e+01
  40  2.37e+02  9.42e-03  1.64e-02  2.50e+00  4.04e+01  1.06e-02  2.30e-02  1.50e+01
  41  2.32e+02  9.15e-03  1.64e-02  2.50e+00  4.01e+01  1.03e-02  2.25e-02  1.50e+01
  42  2.31e+02  8.79e-03  1.51e-02  2.50e+00  3.99e+01  9.93e-03  2.20e-02  1.50e+01
  43  2.29e+02  8.54e-03  1.47e-02  2.50e+00  3.98e+01  9.46e-03  2.14e-02  1.50e+01
  44  2.26e+02  8.31e-03  1.46e-02  2.50e+00  3.95e+01  9.12e-03  2.09e-02  1.50e+01
  45  2.24e+02  8.02e-03  1.41e-02  2.50e+00  3.94e+01  8.92e-03  2.03e-02  1.50e+01
  46  2.22e+02  7.77e-03  1.36e-02  2.50e+00  3.94e+01  8.70e-03  1.98e-02  1.50e+01
  47  2.20e+02  7.59e-03  1.34e-02  2.50e+00  3.93e+01  8.37e-03  1.94e-02  1.50e+01
  48  2.18e+02  7.37e-03  1.30e-02  2.50e+00  3.92e+01  8.08e-03  1.90e-02  1.50e+01
  49  2.16e+02  7.17e-03  1.26e-02  2.50e+00  3.92e+01  7.90e-03  1.87e-02  1.50e+01
  50  2.15e+02  7.01e-03  1.25e-02  2.50e+00  3.91e+01  7.73e-03  1.84e-02  1.50e+01
  51  2.14e+02  6.86e-03  1.22e-02  2.50e+00  3.90e+01  7.52e-03  1.81e-02  1.50e+01
  52  2.12e+02  6.68e-03  1.19e-02  2.50e+00  3.89e+01  7.32e-03  1.78e-02  1.50e+01
  53  2.11e+02  6.54e-03  1.17e-02  2.50e+00  3.88e+01  7.25e-03  1.74e-02  1.50e+01
  54  2.10e+02  6.39e-03  1.15e-02  2.50e+00  3.87e+01  7.00e-03  1.71e-02  1.50e+01
  55  2.09e+02  6.26e-03  1.12e-02  2.50e+00  3.86e+01  6.84e-03  1.68e-02  1.50e+01
  56  2.08e+02  6.13e-03  1.09e-02  2.50e+00  3.86e+01  6.68e-03  1.65e-02  1.50e+01
  57  2.07e+02  6.01e-03  1.08e-02  2.50e+00  3.85e+01  6.58e-03  1.63e-02  1.50e+01
  58  2.05e+02  5.90e-03  1.06e-02  2.50e+00  3.85e+01  6.41e-03  1.60e-02  1.50e+01
  59  2.05e+02  5.77e-03  1.04e-02  2.50e+00  3.84e+01  6.30e-03  1.58e-02  1.50e+01
  60  2.04e+02  5.67e-03  1.02e-02  2.50e+00  3.84e+01  6.15e-03  1.56e-02  1.50e+01
  61  2.03e+02  5.57e-03  1.01e-02  2.50e+00  3.83e+01  6.09e-03  1.54e-02  1.50e+01
  62  2.02e+02  5.47e-03  9.91e-03  2.50e+00  3.83e+01  5.99e-03  1.52e-02  1.50e+01
  63  2.01e+02  5.38e-03  9.81e-03  2.50e+00  3.82e+01  5.89e-03  1.50e-02  1.50e+01
  64  2.00e+02  5.27e-03  9.59e-03  2.50e+00  3.81e+01  5.71e-03  1.48e-02  1.50e+01
  65  2.00e+02  5.19e-03  9.45e-03  2.50e+00  3.81e+01  5.66e-03  1.46e-02  1.50e+01
  66  1.99e+02  5.12e-03  9.39e-03  2.50e+00  3.81e+01  5.53e-03  1.45e-02  1.50e+01
  67  1.98e+02  5.03e-03  9.16e-03  2.50e+00  3.80e+01  5.49e-03  1.43e-02  1.50e+01
  68  1.98e+02  4.96e-03  9.09e-03  2.50e+00  3.80e+01  5.37e-03  1.42e-02  1.50e+01
  69  1.97e+02  4.89e-03  8.97e-03  2.50e+00  3.79e+01  5.29e-03  1.40e-02  1.50e+01
  70  1.96e+02  4.81e-03  8.81e-03  2.50e+00  3.79e+01  5.29e-03  1.39e-02  1.50e+01
  71  1.96e+02  4.75e-03  8.75e-03  2.50e+00  3.78e+01  5.16e-03  1.37e-02  1.50e+01
  72  1.95e+02  4.69e-03  8.69e-03  2.50e+00  3.78e+01  5.11e-03  1.36e-02  1.50e+01
  73  1.94e+02  4.62e-03  8.54e-03  2.50e+00  3.78e+01  5.02e-03  1.35e-02  1.50e+01
  74  1.94e+02  4.56e-03  8.41e-03  2.50e+00  3.77e+01  4.97e-03  1.34e-02  1.50e+01
  75  1.93e+02  4.51e-03  8.37e-03  2.50e+00  3.77e+01  4.92e-03  1.32e-02  1.50e+01
  76  1.93e+02  4.45e-03  8.26e-03  2.50e+00  3.76e+01  4.89e-03  1.31e-02  1.50e+01
  77  1.92e+02  4.40e-03  8.19e-03  2.50e+00  3.76e+01  4.80e-03  1.30e-02  1.50e+01
  78  1.92e+02  4.35e-03  8.10e-03  2.50e+00  3.76e+01  4.79e-03  1.29e-02  1.50e+01
  79  1.91e+02  4.30e-03  8.01e-03  2.50e+00  3.76e+01  4.72e-03  1.28e-02  1.50e+01
  80  1.91e+02  4.26e-03  7.97e-03  2.50e+00  3.75e+01  4.66e-03  1.27e-02  1.50e+01
  81  1.91e+02  4.22e-03  7.89e-03  2.50e+00  3.75e+01  4.64e-03  1.26e-02  1.50e+01
  82  1.90e+02  4.18e-03  7.82e-03  2.50e+00  3.75e+01  4.61e-03  1.25e-02  1.50e+01
  83  1.90e+02  4.15e-03  7.80e-03  2.50e+00  3.74e+01  4.56e-03  1.25e-02  1.50e+01
  84  1.89e+02  4.11e-03  7.75e-03  2.50e+00  3.74e+01  4.52e-03  1.24e-02  1.50e+01
  85  1.89e+02  4.07e-03  7.66e-03  2.50e+00  3.74e+01  4.50e-03  1.23e-02  1.50e+01
  86  1.89e+02  4.04e-03  7.65e-03  2.50e+00  3.73e+01  4.45e-03  1.22e-02  1.50e+01
  87  1.88e+02  4.01e-03  7.59e-03  2.50e+00  3.73e+01  4.44e-03  1.21e-02  1.50e+01
  88  1.88e+02  3.97e-03  7.50e-03  2.50e+00  3.73e+01  4.41e-03  1.20e-02  1.50e+01
  89  1.88e+02  3.94e-03  7.45e-03  2.50e+00  3.72e+01  4.36e-03  1.19e-02  1.50e+01
  90  1.87e+02  3.90e-03  7.37e-03  2.50e+00  3.72e+01  4.35e-03  1.18e-02  1.50e+01
  91  1.87e+02  3.87e-03  7.33e-03  2.50e+00  3.72e+01  4.38e-03  1.17e-02  1.50e+01
  92  1.86e+02  3.84e-03  7.35e-03  2.50e+00  3.72e+01  4.34e-03  1.17e-02  1.50e+01
  93  1.86e+02  3.82e-03  7.34e-03  2.50e+00  3.72e+01  4.25e-03  1.16e-02  1.50e+01
  94  1.86e+02  3.78e-03  7.26e-03  2.50e+00  3.71e+01  4.19e-03  1.15e-02  1.50e+01
  95  1.86e+02  3.74e-03  7.17e-03  2.50e+00  3.71e+01  4.22e-03  1.14e-02  1.50e+01
  96  1.85e+02  3.71e-03  7.16e-03  2.50e+00  3.71e+01  4.16e-03  1.13e-02  1.50e+01
  97  1.85e+02  3.69e-03  7.17e-03  2.50e+00  3.70e+01  4.17e-03  1.12e-02  1.50e+01
  98  1.85e+02  3.66e-03  7.11e-03  2.50e+00  3.70e+01  4.09e-03  1.11e-02  1.50e+01
  99  1.84e+02  3.63e-03  7.06e-03  2.50e+00  3.70e+01  4.13e-03  1.10e-02  1.50e+01
 100  1.84e+02  3.60e-03  7.04e-03  2.50e+00  3.70e+01  4.12e-03  1.10e-02  1.50e+01
 101  1.84e+02  3.57e-03  7.04e-03  2.50e+00  3.70e+01  4.03e-03  1.09e-02  1.50e+01
 102  1.83e+02  3.53e-03  6.93e-03  2.50e+00  3.69e+01  4.01e-03  1.08e-02  1.50e+01
 103  1.83e+02  3.50e-03  6.85e-03  2.50e+00  3.69e+01  3.96e-03  1.07e-02  1.50e+01
 104  1.83e+02  3.47e-03  6.86e-03  2.50e+00  3.69e+01  4.01e-03  1.06e-02  1.50e+01
 105  1.82e+02  3.44e-03  6.78e-03  2.50e+00  3.69e+01  3.91e-03  1.06e-02  1.50e+01
 106  1.82e+02  3.41e-03  6.75e-03  2.50e+00  3.69e+01  3.92e-03  1.05e-02  1.50e+01
 107  1.82e+02  3.39e-03  6.76e-03  2.50e+00  3.69e+01  3.86e-03  1.04e-02  1.50e+01
 108  1.82e+02  3.36e-03  6.69e-03  2.50e+00  3.68e+01  3.83e-03  1.04e-02  1.50e+01
 109  1.81e+02  3.33e-03  6.65e-03  2.50e+00  3.68e+01  3.85e-03  1.03e-02  1.50e+01
 110  1.81e+02  3.32e-03  6.69e-03  2.50e+00  3.68e+01  3.77e-03  1.03e-02  1.50e+01
 111  1.81e+02  3.28e-03  6.58e-03  2.50e+00  3.68e+01  3.78e-03  1.02e-02  1.50e+01
 112  1.80e+02  3.25e-03  6.47e-03  2.50e+00  3.68e+01  3.76e-03  1.01e-02  1.50e+01
 113  1.80e+02  3.23e-03  6.50e-03  2.50e+00  3.68e+01  3.76e-03  1.01e-02  1.50e+01
 114  1.80e+02  3.21e-03  6.51e-03  2.50e+00  3.67e+01  3.79e-03  1.00e-02  1.50e+01
 115  1.80e+02  3.19e-03  6.45e-03  2.50e+00  3.67e+01  3.74e-03  9.97e-03  1.50e+01
 116  1.79e+02  3.17e-03  6.46e-03  2.50e+00  3.67e+01  3.70e-03  9.91e-03  1.50e+01
 117  1.79e+02  3.15e-03  6.42e-03  2.50e+00  3.67e+01  3.69e-03  9.86e-03  1.50e+01
 118  1.79e+02  3.11e-03  6.31e-03  2.50e+00  3.67e+01  3.71e-03  9.81e-03  1.50e+01
 119  1.79e+02  3.09e-03  6.30e-03  2.50e+00  3.67e+01  3.67e-03  9.76e-03  1.50e+01
 120  1.79e+02  3.09e-03  6.36e-03  2.50e+00  3.67e+01  3.70e-03  9.71e-03  1.50e+01
 121  1.78e+02  3.06e-03  6.29e-03  2.50e+00  3.67e+01  3.58e-03  9.67e-03  1.50e+01
 122  1.78e+02  3.03e-03  6.19e-03  2.50e+00  3.66e+01  3.62e-03  9.62e-03  1.50e+01
 123  1.78e+02  3.03e-03  6.26e-03  2.50e+00  3.66e+01  3.56e-03  9.58e-03  1.50e+01
 124  1.78e+02  3.00e-03  6.18e-03  2.50e+00  3.66e+01  3.76e-03  9.53e-03  1.50e+01
 125  1.78e+02  2.98e-03  6.11e-03  2.50e+00  3.66e+01  3.72e-03  9.48e-03  1.50e+01
 126  1.77e+02  2.97e-03  6.16e-03  2.50e+00  3.66e+01  3.79e-03  9.43e-03  1.50e+01
 127  1.77e+02  2.95e-03  6.13e-03  2.50e+00  3.66e+01  3.87e-03  9.37e-03  1.50e+01
 128  1.77e+02  2.92e-03  6.02e-03  2.50e+00  3.66e+01  3.75e-03  9.32e-03  1.50e+01
 129  1.77e+02  2.90e-03  6.00e-03  2.50e+00  3.66e+01  3.76e-03  9.26e-03  1.50e+01
 130  1.77e+02  2.90e-03  6.10e-03  2.50e+00  3.66e+01  3.66e-03  9.22e-03  1.50e+01
 131  1.76e+02  2.89e-03  6.11e-03  2.50e+00  3.65e+01  3.58e-03  9.18e-03  1.50e+01
 132  1.76e+02  2.86e-03  6.02e-03  2.50e+00  3.65e+01  3.38e-03  9.14e-03  1.50e+01
 133  1.76e+02  2.84e-03  5.95e-03  2.50e+00  3.65e+01  3.37e-03  9.10e-03  1.50e+01
 134  1.76e+02  2.83e-03  5.98e-03  2.50e+00  3.65e+01  3.41e-03  9.06e-03  1.50e+01
 135  1.76e+02  2.82e-03  6.00e-03  2.50e+00  3.65e+01  3.41e-03  9.02e-03  1.50e+01
 136  1.75e+02  2.78e-03  5.82e-03  2.50e+00  3.65e+01  3.33e-03  8.99e-03  1.50e+01
 137  1.75e+02  2.76e-03  5.77e-03  2.50e+00  3.65e+01  3.34e-03  8.95e-03  1.50e+01
 138  1.75e+02  2.77e-03  5.88e-03  2.50e+00  3.65e+01  3.32e-03  8.92e-03  1.50e+01
 139  1.75e+02  2.75e-03  5.79e-03  2.50e+00  3.64e+01  3.45e-03  8.88e-03  1.50e+01
 140  1.75e+02  2.73e-03  5.75e-03  2.50e+00  3.64e+01  3.42e-03  8.84e-03  1.50e+01
 141  1.75e+02  2.73e-03  5.82e-03  2.50e+00  3.64e+01  3.27e-03  8.79e-03  1.50e+01
 142  1.74e+02  2.70e-03  5.68e-03  2.50e+00  3.64e+01  3.26e-03  8.74e-03  1.50e+01
 143  1.74e+02  2.67e-03  5.60e-03  2.50e+00  3.64e+01  3.32e-03  8.69e-03  1.50e+01
 144  1.74e+02  2.67e-03  5.65e-03  2.50e+00  3.64e+01  3.24e-03  8.63e-03  1.50e+01
 145  1.74e+02  2.65e-03  5.62e-03  2.50e+00  3.63e+01  3.39e-03  8.57e-03  1.50e+01
 146  1.74e+02  2.63e-03  5.54e-03  2.50e+00  3.63e+01  3.23e-03  8.51e-03  1.50e+01
 147  1.74e+02  2.61e-03  5.53e-03  2.50e+00  3.63e+01  3.16e-03  8.46e-03  1.50e+01
 148  1.73e+02  2.59e-03  5.50e-03  2.50e+00  3.63e+01  3.21e-03  8.40e-03  1.50e+01
 149  1.73e+02  2.59e-03  5.55e-03  2.50e+00  3.63e+01  3.20e-03  8.35e-03  1.50e+01
 150  1.73e+02  2.59e-03  5.66e-03  2.50e+00  3.63e+01  3.17e-03  8.30e-03  1.50e+01
 151  1.73e+02  2.56e-03  5.55e-03  2.50e+00  3.63e+01  3.23e-03  8.25e-03  1.50e+01
 152  1.73e+02  2.54e-03  5.47e-03  2.50e+00  3.63e+01  3.24e-03  8.20e-03  1.50e+01
 153  1.73e+02  2.55e-03  5.61e-03  2.50e+00  3.63e+01  3.23e-03  8.16e-03  1.50e+01
 154  1.72e+02  2.54e-03  5.66e-03  2.50e+00  3.62e+01  3.29e-03  8.12e-03  1.50e+01
 155  1.72e+02  2.51e-03  5.52e-03  2.50e+00  3.62e+01  3.15e-03  8.08e-03  1.50e+01
 156  1.72e+02  2.50e-03  5.48e-03  2.50e+00  3.62e+01  3.16e-03  8.04e-03  1.50e+01
 157  1.72e+02  2.50e-03  5.60e-03  2.50e+00  3.62e+01  3.23e-03  8.01e-03  1.50e+01
 158  1.72e+02  2.50e-03  5.68e-03  2.50e+00  3.62e+01  3.35e-03  7.98e-03  1.50e+01
 159  1.72e+02  2.49e-03  5.65e-03  2.50e+00  3.62e+01  3.24e-03  7.95e-03  1.50e+01
 160  1.72e+02  2.49e-03  5.69e-03  2.50e+00  3.62e+01  3.27e-03  7.91e-03  1.50e+01
 161  1.71e+02  2.48e-03  5.73e-03  2.50e+00  3.62e+01  3.34e-03  7.87e-03  1.50e+01
 162  1.71e+02  2.47e-03  5.74e-03  2.50e+00  3.62e+01  3.14e-03  7.83e-03  1.50e+01
 163  1.71e+02  2.45e-03  5.67e-03  2.50e+00  3.61e+01  3.38e-03  7.79e-03  1.50e+01
 164  1.71e+02  2.42e-03  5.55e-03  2.50e+00  3.61e+01  3.30e-03  7.75e-03  1.50e+01
 165  1.71e+02  2.42e-03  5.57e-03  2.50e+00  3.61e+01  3.15e-03  7.72e-03  1.50e+01
 166  1.71e+02  2.41e-03  5.57e-03  2.50e+00  3.61e+01  3.18e-03  7.69e-03  1.50e+01
 167  1.71e+02  2.40e-03  5.57e-03  2.50e+00  3.61e+01  3.22e-03  7.66e-03  1.50e+01
 168  1.71e+02  2.38e-03  5.47e-03  2.50e+00  3.61e+01  3.23e-03  7.62e-03  1.50e+01
 169  1.71e+02  2.38e-03  5.52e-03  2.50e+00  3.61e+01  3.17e-03  7.59e-03  1.50e+01
 170  1.70e+02  2.39e-03  5.70e-03  2.50e+00  3.61e+01  3.17e-03  7.55e-03  1.50e+01
 171  1.70e+02  2.37e-03  5.56e-03  2.50e+00  3.61e+01  3.01e-03  7.51e-03  1.50e+01
 172  1.70e+02  2.35e-03  5.51e-03  2.50e+00  3.61e+01  3.15e-03  7.48e-03  1.50e+01
 173  1.70e+02  2.36e-03  5.67e-03  2.50e+00  3.60e+01  3.23e-03  7.45e-03  1.50e+01
 174  1.70e+02  2.34e-03  5.54e-03  2.50e+00  3.60e+01  3.12e-03  7.41e-03  1.50e+01
 175  1.70e+02  2.32e-03  5.46e-03  2.50e+00  3.60e+01  3.18e-03  7.39e-03  1.50e+01
 176  1.70e+02  2.35e-03  5.71e-03  2.50e+00  3.60e+01  3.13e-03  7.36e-03  1.50e+01
 177  1.70e+02  2.33e-03  5.62e-03  2.50e+00  3.60e+01  3.16e-03  7.33e-03  1.50e+01
 178  1.70e+02  2.29e-03  5.40e-03  2.50e+00  3.60e+01  3.19e-03  7.30e-03  1.50e+01
 179  1.69e+02  2.29e-03  5.41e-03  2.50e+00  3.60e+01  3.16e-03  7.28e-03  1.50e+01
 180  1.69e+02  2.29e-03  5.45e-03  2.50e+00  3.60e+01  3.32e-03  7.25e-03  1.50e+01
 181  1.69e+02  2.29e-03  5.50e-03  2.50e+00  3.60e+01  3.35e-03  7.22e-03  1.50e+01
 182  1.69e+02  2.28e-03  5.47e-03  2.50e+00  3.59e+01  3.29e-03  7.19e-03  1.50e+01
 183  1.69e+02  2.27e-03  5.42e-03  2.50e+00  3.59e+01  3.28e-03  7.16e-03  1.50e+01
 184  1.69e+02  2.28e-03  5.59e-03  2.50e+00  3.59e+01  3.35e-03  7.13e-03  1.50e+01
 185  1.69e+02  2.30e-03  5.74e-03  2.50e+00  3.59e+01  3.18e-03  7.11e-03  1.50e+01
 186  1.69e+02  2.28e-03  5.60e-03  2.50e+00  3.59e+01  3.29e-03  7.09e-03  1.50e+01
 187  1.69e+02  2.27e-03  5.56e-03  2.50e+00  3.59e+01  3.23e-03  7.07e-03  1.50e+01
 188  1.69e+02  2.29e-03  5.76e-03  2.50e+00  3.59e+01  3.09e-03  7.05e-03  1.50e+01
 189  1.69e+02  2.28e-03  5.76e-03  2.50e+00  3.59e+01  2.97e-03  7.02e-03  1.50e+01
 190  1.68e+02  2.26e-03  5.60e-03  2.50e+00  3.59e+01  3.07e-03  7.00e-03  1.50e+01
 191  1.68e+02  2.29e-03  5.82e-03  2.50e+00  3.58e+01  3.00e-03  6.99e-03  1.50e+01
 192  1.68e+02  2.31e-03  6.02e-03  2.50e+00  3.58e+01  3.18e-03  6.97e-03  1.50e+01
 193  1.68e+02  2.29e-03  5.91e-03  2.50e+00  3.58e+01  3.09e-03  6.96e-03  1.50e+01
 194  1.68e+02  2.30e-03  6.00e-03  2.50e+00  3.58e+01  3.20e-03  6.95e-03  1.50e+01
 195  1.68e+02  2.32e-03  6.13e-03  2.50e+00  3.58e+01  3.44e-03  6.94e-03  1.50e+01
 196  1.68e+02  2.32e-03  6.16e-03  2.50e+00  3.58e+01  3.16e-03  6.92e-03  1.50e+01
 197  1.68e+02  2.31e-03  6.15e-03  2.50e+00  3.58e+01  3.12e-03  6.91e-03  1.50e+01
 198  1.68e+02  2.31e-03  6.18e-03  2.50e+00  3.58e+01  3.29e-03  6.90e-03  1.50e+01
 199  1.68e+02  2.33e-03  6.31e-03  2.50e+00  3.58e+01  3.68e-03  6.90e-03  1.50e+01
------------------------------------------------------------------------------------
DictLearn solve time: 313.77s

Display dictionaries.

D1 = D1.squeeze()
fig = plot.figure(figsize=(14, 7))
plot.subplot(1, 2, 1)
plot.imview(util.tiledict(D0), title='D0', fig=fig)
plot.subplot(1, 2, 2)
plot.imview(util.tiledict(D1), title='D1', fig=fig)
fig.show()
../../_images/cbpdndl_grd_25_0.png

Plot functional value and residuals.

itsx = xstep.getitstat()
itsd = dstep.getitstat()
fig = plot.figure(figsize=(20, 5))
plot.subplot(1, 3, 1)
plot.plot(itsx.ObjFun, xlbl='Iterations', ylbl='Functional', fig=fig)
plot.subplot(1, 3, 2)
plot.plot(np.vstack((itsx.PrimalRsdl, itsx.DualRsdl, itsd.PrimalRsdl,
          itsd.DualRsdl)).T, ptyp='semilogy', xlbl='Iterations',
          ylbl='Residual', lgnd=['X Primal', 'X Dual', 'D Primal', 'D Dual'],
          fig=fig)
plot.subplot(1, 3, 3)
plot.plot(np.vstack((itsx.Rho, itsd.Rho)).T,  xlbl='Iterations',
          ylbl='Penalty Parameter', ptyp='semilogy', lgnd=['Rho', 'Sigma'],
          fig=fig)
fig.show()
../../_images/cbpdndl_grd_27_0.png