def test_target_function(Simulator, nl_nodirect, plt, dimension, seed, rng): eval_points = UniformHypersphere().sample(1000, dimension, rng=rng) targets = eval_points ** 2 model = nengo.Network("Connection Helper", seed=seed) with model: model.config[nengo.Ensemble].neuron_type = nl_nodirect() inp = nengo.Node(np.sin) ens1 = nengo.Ensemble(100, dimension) ens2 = nengo.Ensemble(100, dimension) ens3 = nengo.Ensemble(100, dimension) transform = [[1] if i % 2 == 0 else [-1] for i in range(dimension)] nengo.Connection(inp, ens1, transform=transform) nengo.Connection(ens1, ens2, **target_function(eval_points, targets)) nengo.Connection(ens1, ens3, function=lambda x: x ** 2) probe1 = nengo.Probe(ens2, synapse=0.03) probe2 = nengo.Probe(ens3, synapse=0.03) sim = Simulator(model) sim.run(1) plt.plot(sim.trange(), sim.data[probe1]) plt.plot(sim.trange(), sim.data[probe2], '--') assert np.allclose(sim.data[probe1], sim.data[probe2], atol=0.2)
def test_target_function(Simulator, nl_nodirect, plt, dimensions, radius, seed, rng): eval_points = UniformHypersphere().sample(1000, dimensions, rng=rng) eval_points *= radius f = lambda x: x ** 2 targets = f(eval_points) model = nengo.Network(seed=seed) with model: model.config[nengo.Ensemble].neuron_type = nl_nodirect() inp = nengo.Node(lambda t: np.sin(t * 2 * np.pi) * radius) ens1 = nengo.Ensemble(40 * dimensions, dimensions, radius=radius) n1 = nengo.Node(size_in=dimensions) n2 = nengo.Node(size_in=dimensions) transform = np.linspace(1, -1, num=dimensions).reshape(-1, 1) nengo.Connection(inp, ens1, transform=transform) # pass in eval_points and targets nengo.Connection(ens1, n1, **target_function(eval_points, targets)) # same, but let the builder apply f nengo.Connection(ens1, n2, function=f) probe1 = nengo.Probe(n1, synapse=0.03) probe2 = nengo.Probe(n2, synapse=0.03) sim = Simulator(model) sim.run(0.5) plt.subplot(2, 1, 1) plt.plot(sim.trange(), sim.data[probe1]) plt.title("Square manually with target_function") plt.subplot(2, 1, 2) plt.plot(sim.trange(), sim.data[probe2]) plt.title("Square by passing in function to connection") assert np.allclose(sim.data[probe1], sim.data[probe2], atol=0.2 * radius)
def test_target_function(Simulator, nl_nodirect, plt, dimensions, radius, seed, rng): eval_points = UniformHypersphere().sample(1000, dimensions, rng=rng) eval_points *= radius f = lambda x: x**2 targets = f(eval_points) model = nengo.Network(seed=seed) with model: model.config[nengo.Ensemble].neuron_type = nl_nodirect() inp = nengo.Node(lambda t: np.sin(t * 2 * np.pi) * radius) ens1 = nengo.Ensemble(40 * dimensions, dimensions, radius=radius) n1 = nengo.Node(size_in=dimensions) n2 = nengo.Node(size_in=dimensions) transform = np.linspace(1, -1, num=dimensions).reshape(-1, 1) nengo.Connection(inp, ens1, transform=transform) # pass in eval_points and targets nengo.Connection(ens1, n1, **target_function(eval_points, targets)) # same, but let the builder apply f nengo.Connection(ens1, n2, function=f) probe1 = nengo.Probe(n1, synapse=0.03) probe2 = nengo.Probe(n2, synapse=0.03) with Simulator(model) as sim: sim.run(0.5) plt.subplot(2, 1, 1) plt.plot(sim.trange(), sim.data[probe1]) plt.title('Square manually with target_function') plt.subplot(2, 1, 2) plt.plot(sim.trange(), sim.data[probe2]) plt.title('Square by passing in function to connection') assert np.allclose(sim.data[probe1], sim.data[probe2], atol=0.2 * radius)
def test_target_function(Simulator, nl_nodirect, dimension): model = nengo.Network("Connection Helper", seed=12) eval_points = UniformHypersphere().sample( 1000, dimension, np.random.RandomState(seed=12)) targets = eval_points ** 2 with model: model.config[nengo.Ensemble].neuron_type = nl_nodirect() inp = nengo.Node(np.sin) ens1 = nengo.Ensemble(100, dimension) ens2 = nengo.Ensemble(100, dimension) ens3 = nengo.Ensemble(100, dimension) transform = [[1] if i % 2 == 0 else [-1] for i in range(dimension)] nengo.Connection(inp, ens1, transform=transform) nengo.Connection(ens1, ens2, **target_function(eval_points, targets)) nengo.Connection(ens1, ens3, function=lambda x: x ** 2) probe1 = nengo.Probe(ens2, synapse=0.03) probe2 = nengo.Probe(ens3, synapse=0.03) sim = nengo.Simulator(model) sim.run(1) with Plotter(Simulator, nl_nodirect) as plt: plt.plot(sim.trange(), sim.data[probe1]) plt.plot(sim.trange(), sim.data[probe2], '--') plt.savefig('utils.test_connection.test_target_function' '_2D.pdf') plt.close() assert np.allclose(sim.data[probe1], sim.data[probe2], atol=0.2)
def test_target_function(Simulator, nl_nodirect, dimension): model = nengo.Network("Connection Helper", seed=12) eval_points = UniformHypersphere().sample(1000, dimension, np.random.RandomState(seed=12)) targets = eval_points**2 with model: model.config[nengo.Ensemble].neuron_type = nl_nodirect() inp = nengo.Node(np.sin) ens1 = nengo.Ensemble(100, dimension) ens2 = nengo.Ensemble(100, dimension) ens3 = nengo.Ensemble(100, dimension) transform = [[1] if i % 2 == 0 else [-1] for i in range(dimension)] nengo.Connection(inp, ens1, transform=transform) nengo.Connection(ens1, ens2, **target_function(eval_points, targets)) nengo.Connection(ens1, ens3, function=lambda x: x**2) probe1 = nengo.Probe(ens2, synapse=0.03) probe2 = nengo.Probe(ens3, synapse=0.03) sim = nengo.Simulator(model) sim.run(1) with Plotter(Simulator, nl_nodirect) as plt: plt.plot(sim.trange(), sim.data[probe1]) plt.plot(sim.trange(), sim.data[probe2], '--') plt.savefig('utils.test_connection.test_target_function' '_2D.pdf') plt.close() assert np.allclose(sim.data[probe1], sim.data[probe2], atol=0.2)
def make_dd_net(target_func, period, n_neurons=100, seed=0, label=None): t_val = np.arange(0, period, dt) with nengo.Network(label=label) as dd_net: dd_net.input = nengo.Node(size_in=2) # ideally this should be using a config object readout = nengo.Ensemble(n_neurons=n_neurons, dimensions=2, neuron_type=nengo.LIFRate(), seed=seed) nengo.Connection(dd_net.input, readout, synapse=None) dd_net.output = nengo.Node(size_in=1) nengo.Connection(readout, dd_net.output, **target_function( np.array([np.cos(2*np.pi*t_val/period), np.sin(2*np.pi*t_val/period)]).T, target_func(t_val))) return dd_net