# Modules cbpdndl, cbpdndlmd, prlcnscdl, and onlinecdl¶

These modules includes classes cbpdndl.ConvBPDNDictLearn, prlcnscdl.ConvBPDNDictLearn_Consensus, and onlinecdl.OnlineConvBPDNDictLearn for solving the problem

$\mathrm{argmin}_{\mathbf{d}, \mathbf{x}} \; \frac{1}{2} \sum_k \left \| \sum_m \mathbf{d}_m * \mathbf{x}_{k,m} - \mathbf{s}_k \right \|_2^2 + \lambda \sum_k \sum_m \| \mathbf{x}_{k,m} \|_1 \quad \text{ s.t. } \quad \mathbf{d}_m \in C \;\; \forall m \;,$

where $$C$$ is the feasible set consisting of filters with unit norm and constrained support.

In addition classes cbpdndlmd.ConvBPDNMaskDictLearn, prlcnscdl.ConvBPDNMaskDcplDictLearn_Consensus, and onlinecdl.OnlineConvBPDNMaskDictLearn support solving the problem

$\mathrm{argmin}_{\mathbf{d}, \mathbf{x}} \; \frac{1}{2} \sum_k \left \| W \left(\sum_m \mathbf{d}_m * \mathbf{x}_{k,m} - \mathbf{s}_k \right) \right \|_2^2 + \lambda \sum_k \sum_m \| \mathbf{x}_{k,m} \|_1 \quad \text{ s.t. } \quad \mathbf{d}_m \in C \;\; \forall m \;,$

where $$W$$ is a mask array.

On a multi-core host, prlcnscdl.ConvBPDNDictLearn_Consensus and prlcnscdl.ConvBPDNMaskDcplDictLearn_Consensus can be substantially faster than cbpdndl.ConvBPDNDictLearn and cbpdndlmd.ConvBPDNMaskDictLearn respectively. For large training datasets, the online CDL classes onlinecdl.OnlineConvBPDNDictLearn and onlinecdl.OnlineConvBPDNMaskDictLearn may be the best option, particularly for use on a host without very large amounts of main memory, and with a GPU (see sporco.cuda package).

Usage examples are available.