""" This file serves as an example of how to a) select a problem to be solved b) select a network type c) train the network to minimize recovery MSE """ import numpy as np import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # BE QUIET!!!! # os.environ['CUDA_VISIBLE_DEVICES'] = '7' import tensorflow as tf np.random.seed(1) # numpy is good about making repeatable output tf.set_random_seed( 1) # on the other hand, this is basically useless (see issue 9171) from tools import problems, networks, train A = np.load('A_250_500.npy') prob = problems.bernoulli_gaussian_trial( A=A, M=250, N=500, L=10000, is_train=False ) #a Bernoulli-Gaussian x, noisily observed through a random matrix T = 14 layers = networks.build_LAMP(prob, T=T, shrink='soft', untied=False) train.do_testing_another(layers, prob, T, 'LAMP-soft T=' + str(T) + ' trainrate=0.001.npz')
import numpy as np import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # BE QUIET!!!! import tensorflow as tf np.random.seed(1) # numpy is good about making repeatable output tf.set_random_seed( 1) # on the other hand, this is basically useless (see issue 9171) # import our problems, networks and training modules from tools import problems, networks, train # Create the basic problem structure. prob = problems.bernoulli_gaussian_trial( kappa=None, M=250, N=500, L=1000, pnz=.1, SNR=40) #a Bernoulli-Gaussian x, noisily observed through a random matrix #prob = problems.random_access_problem(2) # 1 or 2 for compressive random access or massive MIMO # build a LISTA network to solve the problem and get the intermediate results so we can greedily extend and then refine(fine-tune) layers = networks.build_LISTA(prob, T=6, initial_lambda=.1, untied=False) # plan the learning training_stages = train.setup_training(layers, prob, trinit=1e-3, refinements=(.5, .1, .01)) # do the learning (takes a while) sess = train.do_training(training_stages, prob, 'LISTA_bg_giid.npz')
xs = [] ys_mean = [] ys_var = [] ys_std = [] T = 16 count = 1 M = 250 N = 500 loss_total = np.zeros([len(eps), 10000]) for i in range(len(eps)): print(eps[i]) prob = problems.bernoulli_gaussian_trial(A=A, M=M, N=N, L=1000, is_train=False) layers = networks.build_LAMP_act(prob, tao, T=T, eps=eps[i], shrink='soft', untied=False) savefile = 'LAMP_T_' + str(T) + '_tao_' + str(tao) + '_count_' + str( count) + '.npz' num, num_min, num_max, loss_mean, loss_var, loss_std, loss = train.do_testing_another( layers, prob, tao, 'T_10_tao_' + str(tao) + '_thresh_' + str(eps[i]) + '_test.txt', savefile) print(num_min)
import tensorflow as tf np.random.seed(1) # numpy is good about making repeatable output tf.set_random_seed( 1) # on the other hand, this is basically useless (see issue 9171) # import our problems, networks and training modules from tools import problems, networks, train A = np.load('A_250_500.npy') tao = 10 eps = 0.01 #this value will not influence the traning results, it's used to see the layers that different signals use, the average layer is reduced if eps increase for i in range(16, 17): prob = problems.bernoulli_gaussian_trial(A=A, M=250, N=500, L=1000, is_train=True) layers = networks.build_LAMP_act(prob, tao, T=i, eps=eps, shrink='soft', untied=False) training_stages = train.setup_training(layers, i, prob, tao=tao, trinit=1e-4, type='LAMP') sess = train.do_training(training_stages,
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # BE QUIET!!!! import tensorflow as tf # np.random.seed(1) # numpy is good about making repeatable output # tf.set_random_seed(1) # on the other hand, this is basically useless (see issue 9171) # import our problems, networks and training modules from tools import problems,networks,train from scipy.io import savemat if __name__ == "__main__": if not os.path.exists("probs"): os.mkdir("probs") start = 4.0 end = 15.0 step = 0.5 for kappa in np.arange(start, end+step, step): for i in range(5): base = "probs/" + "problem_k{0:04.1f}_{1}".format(kappa, i) problems.save_problem(base,problems.bernoulli_gaussian_trial(M=50,N=100,L=500,pnz=.1,kappa=kappa,SNR=40)) # save_problem('problem_k5',problems.bernoulli_gaussian_trial(M=250,N=500,L=1000,pnz=.1,kappa=5,SNR=40)) # save_problem('problem_k15',problems.bernoulli_gaussian_trial(M=250,N=500,L=1000,pnz=.1,kappa=15,SNR=40)) # save_problem('problem_k100',problems.bernoulli_gaussian_trial(M=250,N=500,L=1000,pnz=.1,kappa=100,SNR=40)) # save_problem('problem_k1000',problems.bernoulli_gaussian_trial(M=250,N=500,L=1000,pnz=.1,kappa=1000,SNR=40)) # save_problem('problem_rap1',problems.random_access_problem(1)) # save_problem('problem_rap2',problems.random_access_problem(2)) # save_problem('problem_k100',problems.bernoulli_gaussian_trial(M=250,N=500,L=1000,pnz=.1,kappa=100,SNR=40))
def save_problem(base, prob): print('saving {b}.mat,{b}.npz norm(x)={x:.7f} norm(y)={y:.7f}'.format( b=base, x=la.norm(prob.xval), y=la.norm(prob.yval))) D = dict(A=prob.A, x=prob.xval, y=prob.yval) np.savez(base + '.npz', **D) savemat(base + '.mat', D, oned_as='column') #save_problem('problem_Giid',problems.bernoulli_gaussian_trial(M=250,N=500,L=1000,pnz=.1,kappa=None,SNR=40)) save_problem( 'problem_Giid', problems.bernoulli_gaussian_trial(M=250, N=500, L=1000, pnz=.1, kappa=0, SNR=40)) save_problem( 'problem_k15', problems.bernoulli_gaussian_trial(M=250, N=500, L=1000, pnz=.1, kappa=15, SNR=40)) save_problem( 'problem_k100', problems.bernoulli_gaussian_trial(M=250, N=500, L=1000,
parser.add_argument('--shrink', type=str, default='bg', help='choose your shrinkage function') if __name__ == "__main__": parsed, unparsed = parser.parse_known_args() if not os.path.exists(parsed.dest_models): os.mkdir(parsed.dest_models) if not os.path.exists(parsed.dest_probs): os.mkdir(parsed.dest_probs) prob = problems.bernoulli_gaussian_trial(M=parsed.M, N=parsed.N, L=parsed.L, pnz=parsed.pnz, kappa=parsed.kappa, SNR=parsed.SNR) # save problems base = parsed.dest_probs + "/problem_k{0:04.1f}_{1}".format( parsed.kappa, parsed.id) problems.save_problem(base, prob) if parsed.model == 'LVAMP': layers = networks.build_LVAMP(prob, T=parsed.T, shrink=parsed.shrink) elif parsed.model == 'LAMP': layers = networks.build_LAMP(prob, T=parsed.T, shrink=parsed.shrink, untied=False) elif parsed.model == 'LISTA':