def test_02(self): try: b = bpdndl.BPDNDictLearn(self.D0, self.S) b.solve() except Exception as e: print(e) assert(0)
def test_01(self): lmbda = 1e-1 try: b = bpdndl.BPDNDictLearn(self.D0, self.S, lmbda) b.solve() except Exception as e: print(e) assert(0)
def test_03(self): lmbda = 1e-1 opt = bpdndl.BPDNDictLearn.Options({'AccurateDFid' : True, 'MaxMainIter' : 10}) try: b = bpdndl.BPDNDictLearn(self.D0, self.S, lmbda, opt=opt) b.solve() except Exception as e: print(e) assert(0)
def test_02(self): N = 8 M = 4 K = 8 D0 = np.random.randn(N, M) S = np.random.randn(N, K) try: b = bpdndl.BPDNDictLearn(D0, S) b.solve() except Exception as e: print(e) assert (0)
def gengraphs(pth, nopyfftw): """ Generate call graph images when necessary. Parameter pth is the path to the directory in which images are to be created. Parameter nopyfftw is a flag indicating whether it is necessary to avoid using pyfftw. """ srcmodflt = '^sporco.admm' srcqnmflt = r'^((?!<locals>|__new|_name_nested).)*$' dstqnmflt = r'^((?!<locals>|__new|_name_nested).)*$' fnmsub = ('^sporco.admm.', '') grpflt = r'^[^\.]*.[^\.]*' lnksub = (r'^([^\.]*).(.*)', r'../../sporco.admm.\1.html#sporco.admm.\1.\2') fntsz = 9 fntfm = 'Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans' kwargs = {'fntsz': fntsz, 'fntfm': fntfm, 'rmsz': True} ct = jonga.CallTracer(srcmodflt=srcmodflt, srcqnmflt=srcqnmflt, dstqnmflt=dstqnmflt, fnmsub=fnmsub, grpflt=grpflt, lnksub=lnksub) # Make destination directory if it doesn't exist if not os.path.exists(pth): os.makedirs(pth, exist_ok=True) # Handle environment in which pyfftw is unavailable if nopyfftw: import numpy.fft as npfft import sporco.linalg as spl def empty(shape, dtype, order='C', n=None): return np.zeros(shape, dtype=dtype) spl.pyfftw_empty_aligned = empty def rfftn_empty(shape, axes, dtype, order='C', n=None): ashp = list(shape) raxis = axes[-1] ashp[raxis] = ashp[raxis] // 2 + 1 cdtype = spl.complex_dtype(dtype) return np.zeros(ashp, dtype=cdtype) spl.pyfftw_rfftn_empty_aligned = rfftn_empty spl.fftn = npfft.fftn spl.ifftn = npfft.ifftn spl.rfftn = npfft.rfftn spl.irfftn = npfft.irfftn import numpy as np np.random.seed(12345) #### bpdn module from sporco.admm import bpdn mdnm = 'sporco.admm.bpdn' D = np.random.randn(8, 16) s = np.random.randn(8, 1) lmbda = 0.1 ## BPDN class opt = bpdn.BPDN.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'bpdn_init.svg', **kwargs): b = bpdn.BPDN(D, s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'bpdn_solve.svg', **kwargs): b.solve() ## BPDNJoint class opt = bpdn.BPDNJoint.Options({'Verbose': False, 'MaxMainIter': 1}) mu = 0.01 with CallGraph(ct, mdnm, pth, 'bpdnjnt_init.svg', **kwargs): b = bpdn.BPDNJoint(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'bpdnjnt_solve.svg', **kwargs): b.solve() ## ElasticNet class opt = bpdn.ElasticNet.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'elnet_init.svg', **kwargs): b = bpdn.ElasticNet(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'elnet_solve.svg', **kwargs): b.solve() # BPDNProjL1 class opt = bpdn.BPDNProjL1.Options({'Verbose': False, 'MaxMainIter': 1}) gamma = 2.0 with CallGraph(ct, mdnm, pth, 'bpdnprjl1_init.svg', **kwargs): b = bpdn.BPDNProjL1(D, s, gamma, opt) with CallGraph(ct, mdnm, pth, 'bpdnprjl1_solve.svg', **kwargs): b.solve() ## MinL1InL2Ball class opt = bpdn.MinL1InL2Ball.Options({'Verbose': False, 'MaxMainIter': 1}) epsilon = 1.0 with CallGraph(ct, mdnm, pth, 'bpdnml1l2_init.svg', **kwargs): b = bpdn.MinL1InL2Ball(D, s, epsilon, opt) with CallGraph(ct, mdnm, pth, 'bpdnml1l2_solve.svg', **kwargs): b.solve() #### cbpdn module from sporco.admm import cbpdn mdnm = 'sporco.admm.cbpdn' D = np.random.randn(4, 4, 16) s = np.random.randn(8, 8) lmbda = 0.1 ## ConvBPDN class opt = cbpdn.ConvBPDN.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'cbpdn_init.svg', **kwargs): b = cbpdn.ConvBPDN(D, s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'cbpdn_solve.svg', **kwargs): b.solve() ## ConvBPDNJoint class opt = cbpdn.ConvBPDNJoint.Options({'Verbose': False, 'MaxMainIter': 1}) mu = 0.01 with CallGraph(ct, mdnm, pth, 'cbpdnjnt_init.svg', **kwargs): b = cbpdn.ConvBPDNJoint(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'cbpdnjnt_solve.svg', **kwargs): b.solve() ## ConvElasticNet class opt = cbpdn.ConvElasticNet.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'celnet_init.svg', **kwargs): b = cbpdn.ConvElasticNet(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'celnet_solve.svg', **kwargs): b.solve() ## ConvBPDNGradReg class opt = cbpdn.ConvBPDNGradReg.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'cbpdngrd_init.svg', **kwargs): b = cbpdn.ConvBPDNGradReg(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'cbpdngrd_solve.svg', **kwargs): b.solve() ## ConvBPDNProjL1 class opt = cbpdn.ConvBPDNProjL1.Options({'Verbose': False, 'MaxMainIter': 1}) gamma = 0.5 with CallGraph(ct, mdnm, pth, 'cbpdnprjl1_init.svg', **kwargs): b = cbpdn.ConvBPDNProjL1(D, s, gamma, opt) with CallGraph(ct, mdnm, pth, 'cbpdnprjl1_solve.svg', **kwargs): b.solve() ## ConvMinL1InL2Ball class opt = cbpdn.ConvMinL1InL2Ball.Options({'Verbose': False, 'MaxMainIter': 1}) epsilon = 0.5 with CallGraph(ct, mdnm, pth, 'cbpdnml1l2_init.svg', **kwargs): b = cbpdn.ConvMinL1InL2Ball(D, s, epsilon, opt) with CallGraph(ct, mdnm, pth, 'cbpdnml1l2_solve.svg', **kwargs): b.solve() ## ConvBPDNMaskDcpl class opt = cbpdn.ConvBPDNMaskDcpl.Options({'Verbose': False, 'MaxMainIter': 1}) W = np.ones(s.shape) with CallGraph(ct, mdnm, pth, 'cbpdnmd_init.svg', **kwargs): b = cbpdn.ConvBPDNMaskDcpl(D, s, lmbda, W, opt) with CallGraph(ct, mdnm, pth, 'cbpdnmd_solve.svg', **kwargs): b.solve() #### cbpdntv module from sporco.admm import cbpdntv mdnm = 'sporco.admm.cbpdntv' D = np.random.randn(4, 4, 16) s = np.random.randn(8, 8) lmbda = 0.1 mu = 0.01 ## ConvBPDNScalarTV class opt = cbpdntv.ConvBPDNScalarTV.Options({ 'Verbose': False, 'MaxMainIter': 1 }) with CallGraph(ct, mdnm, pth, 'cbpdnstv_init.svg', **kwargs): b = cbpdntv.ConvBPDNScalarTV(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'cbpdnstv_solve.svg', **kwargs): b.solve() ## ConvBPDNVectorTV class opt = cbpdntv.ConvBPDNVectorTV.Options({ 'Verbose': False, 'MaxMainIter': 1 }) with CallGraph(ct, mdnm, pth, 'cbpdnvtv_init.svg', **kwargs): b = cbpdntv.ConvBPDNVectorTV(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'cbpdnvtv_solve.svg', **kwargs): b.solve() ## ConvBPDNRecTV class opt = cbpdntv.ConvBPDNRecTV.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'cbpdnrtv_init.svg', **kwargs): b = cbpdntv.ConvBPDNRecTV(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'cbpdnrtv_solve.svg', **kwargs): b.solve() #### cmod module from sporco.admm import cmod mdnm = 'sporco.admm.cmod' X = np.random.randn(8, 16) S = np.random.randn(8, 16) ## CnstrMOD class opt = cmod.CnstrMOD.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'cmod_init.svg', **kwargs): b = cmod.CnstrMOD(X, S, opt=opt) with CallGraph(ct, mdnm, pth, 'cmod_solve.svg', **kwargs): b.solve() #### ccmod module from sporco.admm import ccmod mdnm = 'sporco.admm.ccmod' X = np.random.randn(8, 8, 1, 2, 1) S = np.random.randn(8, 8, 2) dsz = (4, 4, 1) ## ConvCnstrMOD_IterSM class opt = ccmod.ConvCnstrMOD_IterSM.Options({ 'Verbose': False, 'MaxMainIter': 1 }) with CallGraph(ct, mdnm, pth, 'ccmodism_init.svg', **kwargs): b = ccmod.ConvCnstrMOD_IterSM(X, S, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodism_solve.svg', **kwargs): b.solve() ## ConvCnstrMOD_CG class opt = ccmod.ConvCnstrMOD_CG.Options({ 'Verbose': False, 'MaxMainIter': 1, 'CG': { 'MaxIter': 1 } }) with CallGraph(ct, mdnm, pth, 'ccmodcg_init.svg', **kwargs): b = ccmod.ConvCnstrMOD_CG(X, S, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodcg_solve.svg', **kwargs): b.solve() ## ConvCnstrMOD_Consensus class opt = ccmod.ConvCnstrMOD_Consensus.Options({ 'Verbose': False, 'MaxMainIter': 1 }) with CallGraph(ct, mdnm, pth, 'ccmodcnsns_init.svg', **kwargs): b = ccmod.ConvCnstrMOD_Consensus(X, S, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodcnsns_solve.svg', **kwargs): b.solve() #### ccmodmd module from sporco.admm import ccmodmd mdnm = 'sporco.admm.ccmodmd' X = np.random.randn(8, 8, 1, 2, 1) S = np.random.randn(8, 8, 2) W = np.array([1.0]) dsz = (4, 4, 1) ## ConvCnstrMODMaskDcpl_IterSM class opt = ccmodmd.ConvCnstrMODMaskDcpl_IterSM.Options({ 'Verbose': False, 'MaxMainIter': 1 }) with CallGraph(ct, mdnm, pth, 'ccmodmdism_init.svg', **kwargs): b = ccmodmd.ConvCnstrMODMaskDcpl_IterSM(X, S, W, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodmdism_solve.svg', **kwargs): b.solve() ## ConvCnstrMODMaskDcpl_CG class opt = ccmodmd.ConvCnstrMODMaskDcpl_CG.Options({ 'Verbose': False, 'MaxMainIter': 1, 'CG': { 'MaxIter': 1 } }) with CallGraph(ct, mdnm, pth, 'ccmodmdcg_init.svg', **kwargs): b = ccmodmd.ConvCnstrMODMaskDcpl_CG(X, S, W, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodmdcg_solve.svg', **kwargs): b.solve() ## ConvCnstrMODMaskDcpl_Consensus class opt = ccmodmd.ConvCnstrMODMaskDcpl_Consensus.Options({ 'Verbose': False, 'MaxMainIter': 1 }) with CallGraph(ct, mdnm, pth, 'ccmodmdcnsns_init.svg', **kwargs): b = ccmodmd.ConvCnstrMODMaskDcpl_Consensus(X, S, W, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodmdcnsns_solve.svg', **kwargs): b.solve() #### bpdndl module from sporco.admm import bpdndl mdnm = 'sporco.admm.bpdndl' D0 = np.random.randn(8, 8) S = np.random.randn(8, 16) lmbda = 0.1 ## BPDNDictLearn class opt = bpdndl.BPDNDictLearn.Options({ 'Verbose': False, 'MaxMainIter': 1, 'AccurateDFid': True }) with CallGraph(ct, mdnm, pth, 'bpdndl_init.svg', **kwargs): b = bpdndl.BPDNDictLearn(D0, S, lmbda, opt) with CallGraph(ct, mdnm, pth, 'bpdndl_solve.svg', **kwargs): b.solve() #### cbpdndl module from sporco.admm import cbpdndl mdnm = 'sporco.admm.cbpdndl' D0 = np.random.randn(4, 4, 16) s = np.random.randn(8, 8, 10) lmbda = 0.1 ## ConvBPDNDictLearn class opt = cbpdndl.ConvBPDNDictLearn.Options({ 'Verbose': False, 'MaxMainIter': 1, 'AccurateDFid': True }) with CallGraph(ct, mdnm, pth, 'cbpdndl_init.svg', **kwargs): b = cbpdndl.ConvBPDNDictLearn(D0, s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'cbpdndl_solve.svg', **kwargs): b.solve() ## ConvBPDNMaskDcplDictLearn class W = np.array([1.0]) opt = cbpdndl.ConvBPDNMaskDcplDictLearn.Options({ 'Verbose': False, 'MaxMainIter': 1, 'AccurateDFid': True }) with CallGraph(ct, mdnm, pth, 'cbpdnmddl_init.svg', **kwargs): b = cbpdndl.ConvBPDNMaskDcplDictLearn(D0, s, lmbda, W, opt) with CallGraph(ct, mdnm, pth, 'cbpdnmddl_solve.svg', **kwargs): b.solve() #### tvl1 module from sporco.admm import tvl1 mdnm = 'sporco.admm.tvl1' s = np.random.randn(16, 16) lmbda = 0.1 ## TVL1Denoise class opt = tvl1.TVL1Denoise.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'tvl1den_init.svg', **kwargs): b = tvl1.TVL1Denoise(s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'tvl1den_solve.svg', **kwargs): b.solve() ## TVL1Deconv class opt = tvl1.TVL1Deconv.Options({'Verbose': False, 'MaxMainIter': 1}) h = np.random.randn(3, 3) with CallGraph(ct, mdnm, pth, 'tvl1dcn_init.svg', **kwargs): b = tvl1.TVL1Deconv(h, s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'tvl1dcn_solve.svg', **kwargs): b.solve() #### tvl2 module from sporco.admm import tvl2 mdnm = 'sporco.admm.tvl2' s = np.random.randn(16, 16) lmbda = 0.1 ## TVL2Denoise class opt = tvl2.TVL2Denoise.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'tvl2den_init.svg', **kwargs): b = tvl2.TVL2Denoise(s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'tvl2den_solve.svg', **kwargs): b.solve() ## TVL2Deconv class opt = tvl2.TVL2Deconv.Options({'Verbose': False, 'MaxMainIter': 1}) h = np.random.randn(3, 3) with CallGraph(ct, mdnm, pth, 'tvl2dcn_init.svg', **kwargs): b = tvl2.TVL2Deconv(h, s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'tvl2dcn_solve.svg', **kwargs): b.solve() srcmodflt = '^sporco.fista' fnmsub = ('^sporco.fista.', '') lnksub = (r'^([^\.]*).(.*)', r'../../sporco.fista.\1.html#sporco.fista.\1.\2') ct = jonga.CallTracer(srcmodflt=srcmodflt, srcqnmflt=srcqnmflt, dstqnmflt=dstqnmflt, fnmsub=fnmsub, grpflt=grpflt, lnksub=lnksub) #### fista.cbpdn module from sporco.fista import cbpdn mdnm = 'sporco.fista.cbpdn' D = np.random.randn(4, 4, 16) s = np.random.randn(8, 8) lmbda = 0.1 ## ConvBPDN class opt = cbpdn.ConvBPDN.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'fista_cbpdn_init.svg', **kwargs): b = cbpdn.ConvBPDN(D, s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'fista_cbpdn_solve.svg', **kwargs): b.solve() #### fista.ccmod module from sporco.fista import ccmod mdnm = 'sporco.fista.ccmod' X = np.random.randn(8, 8, 1, 2, 1) S = np.random.randn(8, 8, 2) dsz = (4, 4, 1) ## ConvCnstrMOD class opt = ccmod.ConvCnstrMOD.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'ccmodfista_init.svg', **kwargs): b = ccmod.ConvCnstrMOD(X, S, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodfista_solve.svg', **kwargs): b.solve() ## ConvCnstrMODMaskDcpl class opt = ccmod.ConvCnstrMODMask.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'ccmodmdfista_init.svg', **kwargs): b = ccmod.ConvCnstrMODMask(X, S, W, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodmdfista_solve.svg', **kwargs): b.solve()
lmbda = 0.1 opt = bpdndl.BPDNDictLearn.Options({ 'Verbose': True, 'MaxMainIter': 100, 'BPDN': { 'rho': 10.0 * lmbda + 0.1 }, 'CMOD': { 'rho': S.shape[1] / 1e3 } }) """ Create solver object and solve. """ d = bpdndl.BPDNDictLearn(D0, S, lmbda, opt) d.solve() print("BPDNDictLearn solve time: %.2fs" % d.timer.elapsed('solve')) """ Display initial and final dictionaries. """ D1 = d.getdict().reshape((8, 8, D0.shape[1])) D0 = D0.reshape(8, 8, D0.shape[-1]) fig = plot.figure(figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(util.tiledict(D0), fgrf=fig, title='D0') plot.subplot(1, 2, 2) plot.imview(util.tiledict(D1), fgrf=fig, title='D1') fig.show() """