Exemple #1
0
def simulations():
    # Setting Seeds
    seeds = uniform(0, 10000, 1).astype(int)

    # sine-wave target
    target = lambda t0: cos(2 * pi * t0 / 10)

    #Simulation parameters for FORCE
    dt = .01  # time step
    tmax = 100  # simulation length
    tstop = 50  # learning stop time
    g = 1.5  # gain factor?
    N = 300  # size of stochastic pool
    lr = 1  # learning rate
    rho = 100  # SFORCE sharpness factor
    errors = []

    for seedling in seeds:
        J, Wz, _, x0, u, w = seedutil.set_simulation_parameters(
            seedling, N, 1, (.1, 1, 1))

        # inp & z are dummy variables
        def model(t0, x, tanh_x, inp, z):
            return -x + g * dot(J, tanh_x) + Wz * z

        x, t, z, _, wu, _ = jedi.force(target, model, lr, dt, tmax, tstop, x0,
                                       w)

        error = np.abs(z[0] - target(t))
        errors.append(error)

    errors = np.array(errors)
Exemple #2
0
def main(seed, sig):
    # Setting Seeds
    seeds = seedutil.load_seeds("main_seeds.npy", "../../../data/stability")
    if seed is not None:
        seeds = seeds[:seed]

    # sine-wave target
    target = lambda t0: np.cos(2 * np.pi * t0/.5)

    #Simulation parameters for FORCE
    parameters = {}
    parameters['dt'] = dt =.01      # time step
    parameters['tmax'] = tmax = 10   # simulation length
    parameters['tstop'] = tstop = 5 # learning stop time
    parameters['tstart'] = tstart = 0 # learning start
    parameters['N'] = N = 300      # size of stochastic pool
    parameters['lr'] = lr = 1   # learning rate
    parameters['rho'] = rho = 1.25 # spectral radius of J
    parameters['sparsity'] = sparsity = (.1, 1, 1) # weight sparsity

    errors = []
    derrors = []
    zs = []
    dzs = []

    for seedling in seeds:
        J, Wz, _, x0, u, w = init_tools.set_simulation_parameters(seedling, N, 1, p=sparsity, rho=rho)

        # inp & z are dummy variables
        def model(t0, x, params):
            tanh_x = params['tanh_x']
            z = params['z']
            return (-x + np.dot(J, tanh_x) + Wz*z)/dt

        x, t, z, _, wu,_ = jedi.force(target, model, lr, dt, tmax, tstart, tstop, x0, w)

        zs.append(z)
        error = z-target(t)
        errors.append(error)

        x, t, z, _, wu,_ = jedi.dforce(jedi.step_decode, target, model, lr, dt, tmax, tstart, tstop, x0, w)

        dzs.append(z)
        derror = z-target(t)
        derrors.append(derror)

    try:
        parameters['t'] = t
    except NameError:
        print "t was not defined; check seed args and script for errors"

    noiseless_errors = {}
    noiseless_errors['parameters'] = parameters
    noiseless_errors['force'] = (errors, zs)
    noiseless_errors['dforce'] = (derrors, dzs)
    cPickle.dump(noiseless_errors, open("../../../data/stability/sin/base/base.p", "wb"))
Exemple #3
0
    if run_force:
        # Checkpoint timer
        timer = time.time()

        for seed_num, seedling in enumerate(seeds):

            J, Wz, _, x0, u, w = init_tools.set_simulation_parameters(seedling, N, I, pE=pE, p=sparsity, rho=rho)

            # inp & z are dummy variables
            def model(t0, x, params):
                z = params['z']
                tanh_x = params['tanh_x']
                return (-x + dot(J, tanh_x) + Wz*z)/dt

            x, t, z, _, wu,_ = jedi.force(targets, model, lr, dt, tmax, tstart, tstop, x0, w, 0)

            xs.append(x)
            zs.append(z)
            wus.append(wu)

            if verbose:
                print "MC simulation %d complete." % seed_num

            if seed_num % checkpoint == 0 and seed_num != 0:
                xs = np.array(xs)
                zs = np.array(zs)
                wus = np.array(wus)

                np.save(''.join(['../data/stability/lorenz/x/FORCE_xs_',
                                str(seed_num-checkpoint+1), '-', str(seed_num)]), xs)
Exemple #4
0
def main(argv):
    # Loading seeds
    seeds = seedutil.load_seeds('main_seeds.npy', dir='../data/stability')

    # Inputs and targets
    targets = np.load("../data/stability/flipflop/targets_tmax10sec.npy")
    inputs = np.load("../data/stability/flipflop/inputs_tmax10sec.npy")
    I = 1

    # Simulation parameters for FORCE
    parameters = {}
    parameters['dt'] = dt =.01      # time step
    parameters['tmax'] = tmax = 10   # simulation length
    parameters['tstop'] = tstop = 5 # learning stop time
    parameters['tstart'] = tstart = 0 # learning start
    parameters['N'] = N = 300      # size of stochastic pool
    parameters['lr'] = lr = 1   # learning rate
    parameters['rho'] = rho = 1.02 # spectral radius of J
    parameters['pE'] = pE = .8 # excitatory percent
    parameters['sparsity'] = sparsity = (.1,1,1) # weight sparsity

    xs = []
    zs = []
    wus = []

    # Script variables
    send_email = False
    ucsd_email = True
    checkpoint = 100
    run_dforce = True
    run_force = True
    write_params = True
    verbose = False

    if write_params:
        param_file = open('../data/stability/flipflop/parameters.txt', 'w')
        for key in parameters:
            param_file.write(": ".join([key, str(parameters[key])]))
            param_file.write('\n')
        param_file.close()

    # Seed subselection
    seeds = seeds[:]

    if run_force:
        # Checkpoint timer
        timer = time.time()

        for seed_num, seedling in enumerate(seeds):

            J, Wz, Wi, x0, u, w = init_tools.set_simulation_parameters(seedling, N, I, pE=pE, p=sparsity, rho=rho)

            # inp & z are dummy variables
            def model(t0, x, params):
                z = params['z']
                tanh_x = params['tanh_x']
                inp = params['inputs']
                return (-x + dot(J, tanh_x) + dot(Wi, inp) + Wz*z)/dt

            x, t, z, _, wu, _ = jedi.force(targets, model, lr, dt, tmax, tstart, tstop, x0, w, 0, inputs=inputs)

            xs.append(x)
            zs.append(z)
            wus.append(wu)

            if verbose:
                print "MC simulation %d complete." % seed_num

            if seed_num % checkpoint == 0 and seed_num != 0:
                xs = np.array(xs)
                zs = np.array(zs)
                wus = np.array(wus)

                np.save(''.join(['../data/stability/flipflop/x/FORCE_xs_',
                                str(seed_num-checkpoint+1), '-', str(seed_num)]), xs)
                np.save(''.join(['../data/stability/flipflop/z/FORCE_zs_',
                                str(seed_num-checkpoint+1), '-', str(seed_num)]), zs)
                np.save(''.join(['../data/stability/flipflop/wu/FORCE_wus_',
                                str(seed_num-checkpoint+1), '-', str(seed_num)]), wus)

                if send_email:
                    mailer.mail(argv, timer, seed_num, len(seeds), ucsd_email)
                timer = time.time()

                del xs, zs, wus
                xs = []
                zs = []
                wus = []

        if xs is not []:
            xs = np.array(xs)
            zs = np.array(zs)
            wus = np.array(wus)

            np.save(''.join(['../data/stability/flipflop/x/FORCE_xs_',
                                str(seed_num-len(xs)+1), '-', str(seed_num)]), xs)
            np.save(''.join(['../data/stability/flipflop/z/FORCE_zs_',
                                str(seed_num-len(xs)+1), '-', str(seed_num)]), zs)
            np.save(''.join(['../data/stability/flipflop/wu/FORCE_wus_',
                                str(seed_num-len(xs)+1), '-', str(seed_num)]), wus)

            if send_email:
                mailer.mail(argv, timer, seed_num, len(seeds), ucsd_email)

        np.save('../data/stability/flipflop/t.npy', t)

    if run_dforce:
        xs = []
        zs = []
        wus = []

        timer = time.time()

        for seed_num, seedling in enumerate(seeds):
            J, Wz, Wi, x0, u, w = init_tools.set_simulation_parameters(seedling, N, I, pE=pE, p=sparsity, rho=rho)

            # inp & z are dummy variables
            def model(t0, x, params):
                z = params['z']
                tanh_x = params['tanh_x']
                inp = params['inputs']
                return (-x + dot(J, tanh_x) + dot(Wi, inp) + Wz*z)/dt

            x, t, z, _, wu, _ = jedi.dforce(jedi.step_decode, targets, model, lr, dt, tmax, tstart,
                                            tstop, x0, w, 0, inputs=inputs)

            xs.append(x)
            zs.append(z)
            wus.append(wu)

            if verbose:
                print "MC simulation %d complete." % seed_num

            if seed_num % checkpoint == 0 and seed_num != 0:
                xs = np.array(xs)
                zs = np.array(zs)
                wus = np.array(wus)

                np.save(''.join(['../data/stability/flipflop/x/DFORCE_xs_',
                                str(seed_num-checkpoint+1), '-', str(seed_num)]), xs)
                np.save(''.join(['../data/stability/flipflop/z/DFORCE_zs_',
                                str(seed_num-checkpoint+1), '-', str(seed_num)]), zs)
                np.save(''.join(['../data/stability/flipflop/wu/DFORCE_wus_',
                                str(seed_num-checkpoint+1), '-', str(seed_num)]), wus)

                if send_email:
                    mailer.mail(argv, timer, seed_num, len(seeds), ucsd_email)
                timer = time.time()

                del xs, zs, wus
                xs = []
                zs = []
                wus = []

        if xs is not []:
            xs = np.array(xs)
            zs = np.array(zs)
            wus = np.array(wus)

            np.save(''.join(['../data/stability/flipflop/x/DFORCE_xs_',
                                str(seed_num-len(xs)+1), '-', str(seed_num)]), xs)
            np.save(''.join(['../data/stability/flipflop/z/DFORCE_zs_',
                                str(seed_num-len(xs)+1), '-', str(seed_num)]), zs)
            np.save(''.join(['../data/stability/flipflop/wu/DFORCE_wus_',
                                str(seed_num-len(xs)+1), '-', str(seed_num)]), wus)

            if send_email:
                mailer.mail(argv, timer, seed_num, len(seeds), ucsd_email)
def main(seed):

    # Setting Seeds
    seeds = seedutil.load_seeds("main_seeds.npy", "../../../data/stability")
    if seed is not None:
        seeds = seeds[:seed]

    #Simulation parameters for FORCE
    parameters = {}
    parameters['dt'] = dt = .01  # time step
    parameters['tstart'] = tstart = 0  # learning start
    parameters['N'] = N = 300  # size of stochastic pool
    parameters['lr'] = lr = 1  # learning rate
    parameters['rho'] = rho = 1.02  # spectral radius of J
    parameters['pE'] = pE = .8  # excitatory percent
    parameters['sparsity'] = sparsity = (.1, 1, 1)  # weight sparsity
    parameters['noise_int_var'] = noise_var = .3
    parameters['trial_num'] = trial_num = 10
    parameters['start_validate'] = start_validate = 7

    # Romo task parameters
    params = {
        'callback_results': None,
        'target_output': True,
        'minibatch_index': 1,
        'best_costs': None,
        'name': "gradient"
    }

    noise_errors = {}
    noise_errors['parameters'] = parameters
    noise_errors['seeds'] = seeds

    rng = np.random.RandomState(seeds[0])
    parameters['trials'] = trials = [
        romo.generate_trial(rng, 5, params) for _ in range(10)
    ]

    for seedling in seeds:
        J, Wz, Wi, x0, u, w = init_tools.set_simulation_parameters(seedling,
                                                                   N,
                                                                   1,
                                                                   pE=pE,
                                                                   p=sparsity,
                                                                   rho=rho)

        def model(t0, x, params):
            index = params['index']
            z = params['z']
            tanh_x = params['tanh_x']
            inp = params['inputs'][index]
            return (-x + np.dot(J, tanh_x) + np.dot(Wi, inp) + Wz * z) / dt

        errors_noise = []
        derrors_noise = []
        zs_noise = []
        dzs_noise = []
        w_ = None

        for trial_num, trial in enumerate(trials):

            targets = trial['outputs'][:, 1]
            inputs = trial['inputs'][:, 1]
            tmax = float(len(targets)) / 100 - .01

            #Noise matrix
            int_noise_mat = np.array([
                np.random.normal(0, noise_var, N) for i in range(len(targets))
            ])

            if trial_num >= start_validate:
                tstop = .5 * tmax
            else:
                tstop = tmax

            if w_ is not None:
                w = w_
                x0 = x[-1]

            x, t, z, _, wu, _ = jedi.force(targets,
                                           model,
                                           lr,
                                           dt,
                                           tmax,
                                           tstart,
                                           tstop,
                                           x0,
                                           w,
                                           inputs=inputs,
                                           noise=int_noise_mat)

            z = z[1:]
            zs_noise.append(z)
            error = z - np.array(targets)
            errors_noise.append(error)

            x, t, z, _, wu, _ = jedi.dforce(jedi.step_decode,
                                            targets,
                                            model,
                                            lr,
                                            dt,
                                            tmax,
                                            tstart,
                                            tstop,
                                            x0,
                                            w,
                                            pE=pE,
                                            inputs=inputs,
                                            noise=int_noise_mat)

            z = z[1:]
            dzs_noise.append(z)
            derror = z - np.array(targets)
            derrors_noise.append(derror)

        noise_errors[seedling] = {}
        noise_errors[seedling]['force'] = (errors_noise, zs_noise)
        noise_errors[seedling]['dforce'] = (derrors_noise, dzs_noise)

    cPickle.dump(
        noise_errors,
        open(
            "../../../data/stability/romo/internal_noise/noise_var_" +
            str(noise_var) + ".p", "wb"))
def main(seed):
    # Setting Seeds
    seeds = seedutil.load_seeds("main_seeds.npy", "../../../data/stability")
    if seed is not None:
        seeds = seeds[:seed]

    # sine-wave target
    target = lambda t0: np.cos(2 * np.pi * t0 / .5)

    #Simulation parameters for FORCE
    parameters = {}
    parameters['dt'] = dt = .01  # time step
    parameters['tmax'] = tmax = 10  # simulation length
    parameters['tstop'] = tstop = 5  # learning stop time
    parameters['tstart'] = tstart = 0  # learning start
    parameters['N'] = N = 300  # size of stochastic pool
    parameters['lr'] = lr = 1  # learning rate
    parameters['rho'] = rho = 1.25  # spectral radius of J
    parameters['pE'] = pE = .8  # excitatory percent
    parameters['sparsity'] = sparsity = (.1, 1, 1)  # weight sparsity
    parameters['t_count'] = t_count = int(tmax / dt +
                                          2)  # number of time steps
    parameters['noise_int_var'] = noise_int_var = .35
    parameters['noise'] = noise = 'pink'

    #Noise matrix
    if noise == 'normal':
        int_noise_mat = np.array(
            [np.random.normal(0, noise_int_var, N) for _ in range(t_count)])
    elif noise == 'pink':
        int_noise_mat = np.array(
            [noise_gen.voss(N, noise_int_var) for _ in range(t_count)])

    errors_noise = []
    derrors_noise = []
    zs_noise = []
    dzs_noise = []

    for seedling in seeds:
        J, Wz, _, x0, u, w = init_tools.set_simulation_parameters(seedling,
                                                                  N,
                                                                  1,
                                                                  pE=pE,
                                                                  p=sparsity,
                                                                  rho=rho)

        # inp & z are dummy variables
        def model(t0, x, params):
            index = params['index']
            tanh_x = params['tanh_x']
            z = params['z']
            noise = params['noise'][index]
            return (-x + np.dot(J, tanh_x) + Wz * z + noise) / dt

        x, t, z, _, wu, _ = jedi.force(target,
                                       model,
                                       lr,
                                       dt,
                                       tmax,
                                       tstart,
                                       tstop,
                                       x0,
                                       w,
                                       noise=int_noise_mat)

        zs_noise.append(z)
        error = z - target(t)
        errors_noise.append(error)

        x, t, z, _, wu, _ = jedi.dforce(jedi.step_decode,
                                        target,
                                        model,
                                        lr,
                                        dt,
                                        tmax,
                                        tstart,
                                        tstop,
                                        x0,
                                        w,
                                        noise=int_noise_mat,
                                        pE=pE)
        dzs_noise.append(z)
        derror = z - target(t)
        derrors_noise.append(derror)

    try:
        parameters['t'] = t
    except NameError:
        print "t was not defined; check seed args and script for errors"

    noise_errors = {}
    noise_errors['parameters'] = parameters
    noise_errors['force'] = (errors_noise, zs_noise)
    noise_errors['dforce'] = (derrors_noise, dzs_noise)

    cPickle.dump(
        noise_errors,
        open(
            "../../../data/stability/sin/internal_noise/noise_" +
            str(noise_int_var) + ".p", "wb"))
def main(seed):
    # Setting Seeds
    seeds = seedutil.load_seeds("main_seeds.npy", "../../../data/stability")
    if seed is not None:
        seeds = seeds[:seed]

    targets = np.load("../../../data/stability/flipflop/targets_tmax10sec.npy")
    inputs = np.load("../../../data/stability/flipflop/inputs_tmax10sec.npy")

    #Simulation parameters for FORCE
    parameters = {}
    parameters['dt'] = dt = .01  # time step
    parameters['tmax'] = tmax = 10  # simulation length
    parameters['tstop'] = tstop = 5  # learning stop time
    parameters['tstart'] = tstart = 0  # learning start
    parameters['N'] = N = 300  # size of stochastic pool
    parameters['lr'] = lr = 1  # learning rate
    parameters['rho'] = rho = 1.02  # spectral radius of J
    parameters['sparsity'] = sparsity = (.1, 1, 1)  # weight sparsity
    parameters['t_count'] = t_count = int(tmax / dt + 2)
    parameters['noise_var'] = noise_var = .35
    parameters['noise'] = noise = 'normal'

    #Noise matrix
    if noise == 'normal':
        noise_mat = np.array(
            [np.random.normal(0, noise_var, N) for _ in range(t_count)])
    elif noise == 'pink':
        noise_mat = np.array(
            [noise_gen.voss(N, noise_var) for _ in range(t_count)])
    else:
        raise ValueError("Noise '%s' invalid" % noise)

    errors_noise = []
    derrors_noise = []
    zs_noise = []
    dzs_noise = []

    for seedling in seeds:
        J, Wz, Wi, x0, u, w = init_tools.set_simulation_parameters(seedling,
                                                                   N,
                                                                   1,
                                                                   p=sparsity,
                                                                   rho=rho)

        def model(t0, x, params):
            index = params['index']
            z = params['z']
            tanh_x = params['tanh_x']
            inp = params['inputs'][index]
            noise = params['noise'][index]
            return (-x + np.dot(J, tanh_x) + np.dot(Wi, inp) + Wz * z +
                    noise) / dt

        x, t, z, _, wu, _ = jedi.force(targets,
                                       model,
                                       lr,
                                       dt,
                                       tmax,
                                       tstart,
                                       tstop,
                                       x0,
                                       w,
                                       inputs=inputs,
                                       noise=noise_mat)

        zs_noise.append(z)
        error = z - np.array(targets)
        errors_noise.append(error)

        x, t, z, _, wu, _ = jedi.dforce(jedi.step_decode,
                                        targets,
                                        model,
                                        lr,
                                        dt,
                                        tmax,
                                        tstart,
                                        tstop,
                                        x0,
                                        w,
                                        inputs=inputs,
                                        noise=noise_mat)

        dzs_noise.append(z)
        derror = z - np.array(targets)
        derrors_noise.append(derror)

    try:
        parameters['t'] = t
    except NameError:
        print "t was not defined; check seed args and script for errors"

    noise_errors = {}
    noise_errors['parameters'] = parameters
    noise_errors['force'] = (errors_noise, zs_noise)
    noise_errors['dforce'] = (derrors_noise, dzs_noise)

    cPickle.dump(
        noise_errors,
        open(
            "../../../data/stability/flipflop/internal_noise/noise_" +
            str(noise_var) + ".p", "wb"))
Exemple #8
0
def main(seed):
    # Setting Seeds
    seeds = seedutil.load_seeds("main_seeds.npy", "../../../data/stability")
    if seed is not None:
        seeds = seeds[:seed]

    #
    targets = np.load("../../../data/stability/flipflop/targets_tmax10sec.npy")
    inputs = np.load("../../../data/stability/flipflop/inputs_tmax10sec.npy")

    #Simulation parameters for FORCE
    parameters = {}
    parameters['dt'] = dt = .01  # time step
    parameters['tmax'] = tmax = 10  # simulation length
    parameters['tstop'] = tstop = 5  # learning stop time
    parameters['tstart'] = tstart = 0  # learning start
    parameters['N'] = N = 300  # size of stochastic pool
    parameters['lr'] = lr = 1  # learning rate
    parameters['rho'] = rho = 1.02  # spectral radius of J
    parameters['sparsity'] = sparsity = (.1, 1, 1)  # weight sparsity
    parameters['t_count'] = t_count = int(tmax / dt + 2)

    errors = []
    derrors = []
    zs = []
    dzs = []

    for seedling in seeds:
        J, Wz, Wi, x0, u, w = init_tools.set_simulation_parameters(seedling,
                                                                   N,
                                                                   1,
                                                                   p=sparsity,
                                                                   rho=rho)

        def model(t0, x, params):
            index = params['index']
            z = params['z']
            tanh_x = params['tanh_x']
            inp = params['inputs'][index]
            return (-x + np.dot(J, tanh_x) + np.dot(Wi, inp) + Wz * z) / dt

        x, t, z, _, wu, _ = jedi.force(targets,
                                       model,
                                       lr,
                                       dt,
                                       tmax,
                                       tstart,
                                       tstop,
                                       x0,
                                       w,
                                       inputs=inputs)

        zs.append(z)
        error = z - np.array(targets)
        errors.append(error)

        x, t, z, _, wu, _ = jedi.dforce(jedi.step_decode,
                                        targets,
                                        model,
                                        lr,
                                        dt,
                                        tmax,
                                        tstart,
                                        tstop,
                                        x0,
                                        w,
                                        inputs=inputs)

        dzs.append(z)
        derror = z - np.array(targets)
        derrors.append(derror)

    try:
        parameters['t'] = t
    except NameError:
        print "t was not defined; check seed args and script for errors"

    noiseless_errors = {}
    noiseless_errors['parameters'] = parameters
    noiseless_errors['force'] = (errors, zs)
    noiseless_errors['dforce'] = (derrors, dzs)
    cPickle.dump(noiseless_errors,
                 open("../../../data/stability/flipflop/base/base.p", "wb"))
Exemple #9
0
                                                               p=sparsity,
                                                               rho=rho)

    def model(t0, x, params):
        z = params['z']
        tanh_x = params['tanh_x']
        inp = params['inputs']
        noise = params['noise']
        return (-x + np.dot(J, tanh_x) + np.dot(Wi, inp) + Wz * z + noise) / dt

    x, t, z, _, wu, _ = jedi.force(targets,
                                   model,
                                   lr,
                                   dt,
                                   tmax,
                                   tstart,
                                   tstop,
                                   x0,
                                   w,
                                   noise=noise_mat,
                                   inputs=inputs)

    error = np.abs(z - np.array(targets))
    errors.append(error)

errors = np.array(errors)

plt.figure(figsize=(12, 5))
plt.legend()
plt.subplot(2, 1, 2)
for i in range(20):