예제 #1
0
def test_simple_split():
    model = nengo.Network()

    dims = 4
    seed = 1
    npd = 200
    sim_time = 1.0

    rng = np.random.RandomState(seed)
    a = rng.normal(size=dims)
    a /= np.linalg.norm(a)
    model.config[nengo.Ensemble].neuron_type = nengo.LIFRate()

    with model:
        input = nengo.Node(a)
        A = nengo.networks.EnsembleArray(npd, dims, radius=np.sqrt(1./dims))
        B = nengo.networks.EnsembleArray(npd, dims, radius=np.sqrt(1./dims))

        nengo.Connection(input, A.input)
        nengo.Connection(A.output, B.input)

        p = nengo.Probe(B.output)

    sim_no_split = nengo.Simulator(model)
    sim_no_split.run(sim_time)

    splitter = EnsembleArraySplitter()

    splitter.split(model, max_neurons=npd, preserve_zero_conns=False)

    assert len(model.networks) == 2
    assert len(model.all_networks) == 2
    assert len(model.all_ensembles) == 2 * dims
    assert len(model.all_ensembles) == 2 * dims
    assert len(model.ensembles) == 0
    assert len(model.all_nodes) == 4 * dims + 1
    assert len(model.all_connections) == 6 * dims

    sim_split = nengo.Simulator(model)
    sim_split.run(sim_time)

    pre_split_data = sim_no_split.data
    post_split_data = splitter.unsplit_data(sim_split)

    assert np.allclose(
        pre_split_data[p][-10:], post_split_data[p][-10:], atol=0.1)

    remove_log_file(splitter)
예제 #2
0
def test_circconv_split():

    dims = 16
    seed = 1
    npd = 100
    sim_time = 0.1

    rng = np.random.RandomState(seed)

    magnitude = 1.0
    pstc = 0.005

    a = rng.normal(scale=np.sqrt(1./dims), size=dims) * magnitude
    b = rng.normal(scale=np.sqrt(1./dims), size=dims) * magnitude
    result = circconv(a, b)

    model = nengo.Network(label="CircConv", seed=seed)
    model.config[nengo.Ensemble].neuron_type = nengo.LIFRate()

    with model:
        inputA = nengo.Node(a)
        inputB = nengo.Node(b)

        input_ea_a = nengo.networks.EnsembleArray(
            npd, dims, radius=np.sqrt(1./dims), label="A")
        input_ea_b = nengo.networks.EnsembleArray(
            npd, dims, radius=np.sqrt(1./dims), label="B")

        nengo.Connection(inputA, input_ea_a.input, synapse=None)
        nengo.Connection(inputB, input_ea_b.input, synapse=None)

        cconv = nengo.networks.CircularConvolution(
            npd, dimensions=dims,
            input_magnitude=magnitude)

        nengo.Connection(input_ea_a.output, cconv.A, synapse=pstc)
        nengo.Connection(input_ea_b.output, cconv.B, synapse=pstc)

        output = nengo.networks.EnsembleArray(
            npd, dims, radius=np.sqrt(1./dims), label="output")

        nengo.Connection(cconv.output, output.input, synapse=pstc)

        p = nengo.Probe(output.output)

    sim_no_split = nengo.Simulator(model)
    sim_no_split.run(sim_time)

    splitter = EnsembleArraySplitter()

    splitter.split(model, max_neurons=npd, preserve_zero_conns=False)

    assert len(model.networks) == 4
    assert len(model.all_networks) == 7
    assert len(model.ensembles) == 0
    assert len(model.all_ensembles) == 3 * dims + 2 * (2 * dims + 4)

    sim_split = nengo.Simulator(model)
    sim_split.run(sim_time)

    pre_split_data = sim_no_split.data
    post_split_data = splitter.unsplit_data(sim_split)

    error = rmse(result, pre_split_data[p][-1])
    assert error < 0.1

    error = rmse(result, post_split_data[p][-1])
    assert error < 0.1

    error = rmse(pre_split_data[p][-1], post_split_data[p][-1])
    assert error < 0.1

    remove_log_file(splitter)
예제 #3
0
파일: grid.py 프로젝트: e2crawfo/nengo_mpi
        if use_ea:
            ensembles[-1][-1].add_output(
                'zero', function=lambda x: 0)
            nengo.Connection(
                ensembles[-1][-1].zero, ensembles[-1][0].input)
            probes.append(
                nengo.Probe(ensemble.output, synapse=0.01))
        else:
            nengo.Connection(
                ensembles[-1][-1], ensembles[-1][0],
                function=lambda x: np.zeros(D))
            probes.append(
                nengo.Probe(ensemble, synapse=0.01))

if use_ea and split_ea > 1:
    splitter = EnsembleArraySplitter()
    max_neurons = np.ceil(float(D) / split_ea) * N
    splitter.split(m, max_neurons)

if use_mpi:
    if partitioner is not None:
        sim = nengo_mpi.Simulator(
            m, dt=0.001, partitioner=partitioner, save_file=save_file)
    else:
        sim = nengo_mpi.Simulator(
            m, dt=0.001, assignments=assignments, save_file=save_file)

    if save_file:
        print "Saved network to", save_file
else:
    then = time.time()
예제 #4
0
        out_degree = pd.Series([o[1] for o in dg.out_degree_iter()])
        print "Out-degree: "
        print out_degree.describe()

        in_degree = pd.Series([i[1] for i in dg.in_degree_iter()])
        print "In-degree: "
        print in_degree.describe()
    else:
        raise NotImplemented()

    model, probes = nengo_network_from_graph(
        name, n_nodes, edges, use_ea, fake, dim,
        npd, pct_probed, rng)

    if use_ea and split_ea > 1:
        splitter = EnsembleArraySplitter()
        max_neurons = np.ceil(float(dim) / split_ea) * npd
        splitter.split(model, max_neurons)

    if use_mpi:
        fmap = {
            'default': None, '': None,
            'metis': metis_partitioner, 'random': random_partitioner,
            'work': work_balanced_partitioner}

        partitioner = nengo_mpi.Partitioner(n_procs, func=fmap[partitioner])
        sim = nengo_mpi.Simulator(
            model, dt=0.001, partitioner=partitioner, save_file=save_file)

        if save_file:
            print "Saved network to", save_file