コード例 #1
0
ファイル: LAMP_test.py プロジェクト: liuxuvip/HaltingNetwork
"""
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')
コード例 #2
0
ファイル: LISTA.py プロジェクト: osmanmusa/LAMP_python3
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')
コード例 #3
0
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)
コード例 #4
0
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,
コード例 #5
0
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))
コード例 #6
0

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,
コード例 #7
0
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':