Beispiel #1
0
def test_orthogonalize():
    n = 10000
    din, dout = 30, 10
    rng = np.random
    T = orthogonalize(rng.normal(size=(din, dout)))
    X = rng.normal(size=(n, din))
    Y = np.dot(X, T)
    print(X.std(axis=1).mean())
    print(Y.std(axis=1).mean())

    Y2 = rng.normal(size=(n, dout))
    X2 = np.dot(Y2, T.T)
    print(X2.std(axis=1).mean())
    print(Y2.std(axis=1).mean())
    # n_per_batch = 20

    n_per_show = 40
    assert n_per_show % n_per_batch == 0
    block_size = n_per_show // n_per_batch

    # n = 2000
    # n = 9000
    # n = 12000
    # n = 15000
    n = 21000

    alpha = 0

    # --- problem dataset
    T = orthogonalize(rng.normal(size=(din, dout)))
    genX = lambda n: rng.normal(scale=1., size=(n, din))
    genY = lambda X: np.dot(X, T)

    Xref = genX(1000)
    Yref = genY(Xref)
    Yrms = rms(Yref, axis=1).mean()

    # --- nonlinearity
    tau_rc = 0.05
    amp = 0.01

    f_dfs = [
        static_f_df('lifnone', tau_rc=tau_rc, amplitude=amp),
        static_f_df('lifstep', tau_rc=tau_rc, amplitude=amp),
        static_f_df('liflinear', tau_rc=tau_rc, amplitude=amp),
Beispiel #3
0
def objective(args):
    eta = args['eta']
    prestime = args['prestime']

    n_examples = int(np.ceil(t_train / prestime))

    # dataset
    T = orthogonalize(rng.normal(size=(din, dout)))
    genX = lambda n: rng.normal(scale=0.5, size=(n, din))
    genY = lambda X: np.dot(X, T)
    X = genX(n_examples)
    Y = genY(X)
    x_process = nengo.processes.PresentInput(X, prestime)
    y_process = nengo.processes.PresentInput(Y, prestime)

    Xtest = genX(1000)
    Ytest = genY(Xtest)
    Ytestrms = rms(Ytest, axis=1).mean()

    weights = initial_weights([2 * din] + dhids + [dout],
                              kind='gaussian',
                              scale=5e-4,
                              rng=rng)

    fa_args = dict(eta=eta,
                   seed=2,
                   n_output=20,
                   n_error=20,
                   o_encoders=eye_encoders(dout),
                   e_encoders=eye_encoders(dout),
                   e_intercepts=Uniform(0, 0.8),
                   b_kind='gaussian',
                   b_scale=1.7)

    model = nengo.Network()
    model.config[nengo.Ensemble].neuron_type = neuron_type
    model.config[nengo.Connection].synapse = synapse
    with model:
        x = nengo.Node(x_process)
        y = nengo.Node(y_process)
        xe = Encoder(x, seed=1)
        learner = FATwoStepNetwork(xe.output, y, weights, **fa_args)
        xp = nengo.Probe(x)
        yp = nengo.Probe(y)
        xep = nengo.Probe(xe.output)

    with nengo.Simulator(model) as sim:
        sim.run(t_train)

        XEtest = xe.encode(Xtest, sim=sim)
        Ztest = learner.forward(sim, XEtest)
        cost = rms(Ztest - Ytest, axis=1).mean() / Ytestrms

    # save
    dt = sim.dt
    t = sim.trange()
    x = sim.data[xp]
    xe = sim.data[xep]
    y = sim.data[yp]
    z = sim.data[learner.yp]
    data = dict(
        eta=eta,
        prestime=prestime,
        dt=dt,
        t_train=t_train,
        din=din,
        dhids=dhids,
        dout=dout,
        T=T,
        X=X,
        Y=Y,
        Xtest=Xtest,
        Ytest=Ytest,
        XEtest=XEtest,
        Ztest=Ztest,
        # t=t, x=x, xe=xe, y=y, z=z,
        cost=cost)

    rargs = '_'.join('%s=%r' % (k, v) for k, v in args.items())
    filename = os.path.join(filedir, 'trial_%s.npz' % (rargs))
    np.savez(filename, **data)
    print("Saved %r" % filename)

    # result
    status = hyperopt.STATUS_OK if np.isfinite(cost) else hyperopt.STATUS_FAIL
    sargs = arg_string(args)
    print("%s: %0.3e" % (sargs, cost))

    return dict(loss=cost, status=status)