예제 #1
0
def test_circularconv_transforms(invert_a, invert_b, rng):
    """Test the circular convolution transforms"""
    dims = 100
    x = rng.randn(dims)
    y = rng.randn(dims)
    z0 = circconv(x, y, invert_a=invert_a, invert_b=invert_b)

    tr_a = transform_in(dims, 'A', invert_a)
    tr_b = transform_in(dims, 'B', invert_b)
    tr_out = transform_out(dims)
    XY = np.dot(tr_a, x) * np.dot(tr_b, y)
    z1 = np.dot(tr_out, XY)

    assert np.allclose(z0, z1)
예제 #2
0
def test_circularconv_transforms(invert_a, invert_b, rng):
    """Test the circular convolution transforms"""
    dims = 100
    x = rng.randn(dims)
    y = rng.randn(dims)
    z0 = circconv(x, y, invert_a=invert_a, invert_b=invert_b)

    tr_a = transform_in(dims, 'A', invert_a)
    tr_b = transform_in(dims, 'B', invert_b)
    tr_out = transform_out(dims)
    XY = np.dot(tr_a, x) * np.dot(tr_b, y)
    z1 = np.dot(tr_out, XY)

    assert np.allclose(z0, z1)
예제 #3
0
dim = 16
# dim = 256
neurons_per_product = 64
# neurons_per_product = 256
radius = 1

rng = np.random.RandomState(129)
a = rng.normal(scale=np.sqrt(1./dim), size=dim)
b = rng.normal(scale=np.sqrt(1./dim), size=dim)
c = circconv(a, b)
assert np.abs(a).max() < radius
assert np.abs(b).max() < radius
assert np.abs(c).max() < radius

# check FFT magnitude
tr_A = transform_in(dim, 'A', invert=False)
tr_B = transform_in(dim, 'B', invert=False)
d = np.dot(tr_A, a) * np.dot(tr_B, b)
assert np.abs(d).max() < (4 * radius)
# ^ TODO: 4 * radius just seems to work from looking at Nengo code. Why?

# --- model
with nengo.Network(label="ProfileConv", seed=3) as model:
    inputA = nengo.Node(a, label="inputA")
    inputB = nengo.Node(b, label="inputB")
    A = nengo.networks.EnsembleArray(
        neurons_per_product, dim, radius=radius, label='A')
    B = nengo.networks.EnsembleArray(
        neurons_per_product, dim, radius=radius, label='B')
    C = nengo.networks.EnsembleArray(
        neurons_per_product, dim, radius=radius, label='C')
예제 #4
0
def test_transform_in_align_error():
    with pytest.raises(ValidationError, match="'align' must be either"):
        transform_in(dims=3, align="badval", invert=False)
예제 #5
0
dim = 16
# dim = 256
neurons_per_product = 64
# neurons_per_product = 256
radius = 1

rng = np.random.RandomState(129)
a = rng.normal(scale=np.sqrt(1. / dim), size=dim)
b = rng.normal(scale=np.sqrt(1. / dim), size=dim)
c = circconv(a, b)
assert np.abs(a).max() < radius
assert np.abs(b).max() < radius
assert np.abs(c).max() < radius

# check FFT magnitude
tr_A = transform_in(dim, 'A', invert=False)
tr_B = transform_in(dim, 'B', invert=False)
d = np.dot(tr_A, a) * np.dot(tr_B, b)
assert np.abs(d).max() < (4 * radius)
# ^ TODO: 4 * radius just seems to work from looking at Nengo code. Why?

# --- model
with nengo.Network(label="ProfileConv", seed=3) as model:
    inputA = nengo.Node(a, label="inputA")
    inputB = nengo.Node(b, label="inputB")
    A = nengo.networks.EnsembleArray(neurons_per_product,
                                     dim,
                                     radius=radius,
                                     label='A')
    B = nengo.networks.EnsembleArray(neurons_per_product,
                                     dim,
예제 #6
0
dim = 16
# dim = 256
neurons_per_product = 64
# neurons_per_product = 256
radius = 1

rng = np.random.RandomState(129)
a = rng.normal(scale=np.sqrt(1.0 / dim), size=dim)
b = rng.normal(scale=np.sqrt(1.0 / dim), size=dim)
c = circconv(a, b)
assert np.abs(a).max() < radius
assert np.abs(b).max() < radius
assert np.abs(c).max() < radius

# check FFT magnitude
tr_A = transform_in(dim, "A", invert=False)
tr_B = transform_in(dim, "B", invert=False)
d = np.dot(tr_A, a) * np.dot(tr_B, b)
assert np.abs(d).max() < (4 * radius)
# ^ TODO: 4 * radius just seems to work from looking at Nengo code. Why?

# --- model
with nengo.Network(label="ProfileConv", seed=3) as model:
    inputA = nengo.Node(a, label="inputA")
    inputB = nengo.Node(b, label="inputB")
    A = nengo.networks.EnsembleArray(neurons_per_product,
                                     dim,
                                     radius=radius,
                                     label="A")
    B = nengo.networks.EnsembleArray(neurons_per_product,
                                     dim,