コード例 #1
0
 def test_11(self):
     N = 63
     M = 4
     Nd = 8
     D = cp.random.randn(Nd, Nd, M)
     X0 = cp.zeros((N, N, M))
     xr = cp.random.randn(N, N, M)
     xp = cp.abs(xr) > 3
     X0[xp] = cp.random.randn(X0[xp].size)
     S = cp.sum(ifftn(
         fftn(D, (N, N), (0, 1)) * fftn(X0, None, (0, 1)), None,
         (0, 1)).real,
                axis=2)
     lmbda = 1e-4
     rho = 1e-1
     opt = cbpdn.ConvBPDN.Options({
         'Verbose': False,
         'MaxMainIter': 500,
         'RelStopTol': 1e-3,
         'rho': rho,
         'AutoRho': {
             'Enabled': False
         }
     })
     b = cbpdn.ConvBPDN(D, S, lmbda, opt)
     b.solve()
     X1 = b.Y.squeeze()
     assert rrs(X0, X1) < 5e-5
     Sr = b.reconstruct().squeeze()
     assert rrs(S, Sr) < 1e-4
コード例 #2
0
 def test_22(self):
     N = 32
     M = 4
     Nd = 8
     D = cp.random.randn(Nd, Nd, M)
     D /= cp.sqrt(cp.sum(D**2, axis=(0, 1)))
     X0 = cp.zeros((N, N, M))
     xr = cp.random.randn(N, N, M)
     xp = cp.abs(xr) > 3
     X0[xp] = cp.random.randn(X0[xp].size)
     S = cp.sum(fftconv(D, X0), axis=2)
     lmbda = 1e-3
     opt = cbpdn.ConvBPDN.Options(
         {'Verbose': False, 'MaxMainIter': 500, 'RelStopTol': 1e-5,
          'rho': 5e-1, 'AutoRho': {'Enabled': False}})
     bp = cbpdn.ConvBPDN(D, S, lmbda, opt)
     Xp = bp.solve()
     epsilon = cp.linalg.norm(bp.reconstruct(Xp).squeeze() - S)
     opt = cbpdn.ConvMinL1InL2Ball.Options(
         {'Verbose': False, 'MaxMainIter': 500, 'RelStopTol': 1e-5,
          'rho': 2e2, 'RelaxParam': 1.0, 'AutoRho': {'Enabled': False}})
     bc = cbpdn.ConvMinL1InL2Ball(D, S, epsilon=epsilon, opt=opt)
     Xc = bc.solve()
     assert cp.linalg.norm(Xp - Xc) / cp.linalg.norm(Xp) < 1e-3
     assert cp.abs(cp.linalg.norm(Xp.ravel(), 1) -
                   cp.linalg.norm(Xc.ravel(), 1)) < 1e-3
コード例 #3
0
 def test_05(self):
     N = 16
     Nd = 5
     K = 2
     M = 4
     D = cp.random.randn(Nd, Nd, M)
     s = cp.random.randn(N, N, K)
     lmbda = 1e-1
     b = cbpdn.ConvBPDN(D, s, lmbda)
     assert b.cri.dimC == 0
     assert b.cri.dimK == 1
コード例 #4
0
 def test_03(self):
     N = 16
     Nd = 5
     Cd = 3
     M = 4
     D = cp.random.randn(Nd, Nd, Cd, M)
     s = cp.random.randn(N, N, Cd)
     lmbda = 1e-1
     b = cbpdn.ConvBPDN(D, s, lmbda)
     assert b.cri.dimC == 1
     assert b.cri.dimK == 0
コード例 #5
0
 def test_01(self):
     N = 16
     Nd = 5
     Cs = 3
     M = 4
     D = cp.random.randn(Nd, Nd, M)
     s = cp.random.randn(N, N, Cs)
     lmbda = 1e-1
     b = cbpdn.ConvBPDN(D, s, lmbda, dimK=0)
     assert b.cri.dimC == 1
     assert b.cri.dimK == 0
コード例 #6
0
 def test_02(self):
     N = 16
     Nd = 5
     Cs = 3
     K = 5
     M = 4
     D = cp.random.randn(Nd, Nd, M)
     s = cp.random.randn(N, N, Cs, K)
     lmbda = 1e-1
     b = cbpdn.ConvBPDN(D, s, lmbda)
     assert b.cri.dimC == 1
     assert b.cri.dimK == 1
コード例 #7
0
 def test_09(self):
     N = 16
     Nd = 5
     M = 4
     D = cp.random.randn(Nd, Nd, M)
     s = cp.random.randn(N, N)
     try:
         b = cbpdn.ConvBPDN(D, s)
         b.solve()
     except Exception as e:
         print(e)
         assert 0
コード例 #8
0
 def test_32(self):
     N = 16
     Nd = 5
     M = 4
     D = cp.random.randn(Nd, Nd, M)
     s = cp.random.randn(N, N)
     lmbda = 1e-1
     opt = cbpdn.ConvBPDN.Options({'Verbose': False, 'MaxMainIter': 10})
     b = cbpdn.ConvBPDN(D, s, lmbda, opt)
     bp = pickle.dumps(b)
     c = pickle.loads(bp)
     Xb = b.solve()
     Xc = c.solve()
     assert cp.linalg.norm(Xb - Xc) == 0.0
コード例 #9
0
 def test_13(self):
     N = 16
     Nd = 5
     Cd = 3
     M = 4
     D = cp.random.randn(Nd, Nd, Cd, M)
     s = cp.random.randn(N, N, Cd)
     lmbda = 1e-1
     try:
         opt = cbpdn.ConvBPDN.Options({'LinSolveCheck': True})
         b = cbpdn.ConvBPDN(D, s, lmbda, opt=opt, dimK=0)
         b.solve()
     except Exception as e:
         print(e)
         assert 0
     assert list2array(b.getitstat().XSlvRelRes).max() < 1e-5
コード例 #10
0
 def test_08(self):
     Nr = 16
     Nc = 17
     Nd = 5
     M = 4
     D = cp.random.randn(Nd, Nd, M)
     s = cp.random.randn(Nr, Nc)
     lmbda = 1e-1
     try:
         opt = cbpdn.ConvBPDN.Options({'LinSolveCheck': True})
         b = cbpdn.ConvBPDN(D, s, lmbda, opt=opt)
         b.solve()
     except Exception as e:
         print(e)
         assert 0
     assert list2array(b.getitstat().XSlvRelRes).max() < 1e-5
コード例 #11
0
 def test_06(self):
     N = 16
     Nd = 5
     K = 2
     M = 4
     D = cp.random.randn(Nd, Nd, M)
     s = cp.random.randn(N, N, K)
     dt = cp.float32
     opt = cbpdn.ConvBPDN.Options({'Verbose': False, 'MaxMainIter': 20,
                                   'AutoRho': {'Enabled': True},
                                   'DataType': dt})
     lmbda = 1e-1
     b = cbpdn.ConvBPDN(D, s, lmbda, opt=opt)
     b.solve()
     assert b.X.dtype == dt
     assert b.Y.dtype == dt
     assert b.U.dtype == dt