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