Example #1
0
    def test_cfsom(self):
        """
        """

        gaussian_width = 0.02
        gaussian_height = 0.9

        input_pattern = Gaussian(
            bounds=BoundingBox(points=((-0.8, -0.8), (0.8, 0.8))),
            scale=gaussian_height,
            aspect_ratio=gaussian_width / gaussian_height,
            x=numbergen.UniformRandom(lbound=-0.5, ubound=0.5, seed=100),
            y=numbergen.UniformRandom(lbound=-0.5, ubound=0.5, seed=200),
            orientation=numbergen.UniformRandom(lbound=-pi,
                                                ubound=pi,
                                                seed=300))

        # input generation params
        GeneratorSheet.period = 1.0
        GeneratorSheet.nominal_density = 5
        GeneratorSheet.print_level = param.parameterized.WARNING

        # cf som parameters
        CFSheet.nominal_density = 5

        ###########################################
        # build simulation

        param.parameterized.min_print_level = param.parameterized.WARNING

        s = Simulation()
        s.verbose("Creating simulation objects...")
        s['retina'] = GeneratorSheet(input_generator=input_pattern)

        s['V1'] = CFSheet()
        s['V1'].print_level = param.parameterized.WARNING

        s.connect('retina',
                  'V1',
                  delay=1,
                  connection_type=CFProjection,
                  learning_fn=CFPLF_Hebbian_opt())
        s.print_level = param.parameterized.WARNING

        self.assertTrue(
            topo.sim['V1'].projections().get('retinaToV1', None) != None)
        self.assertTrue(
            topo.sim['V1'].projections().get('retinaToV1', None) != None)
        s.run(10)
Example #2
0
def SG(K,
       X,
       Y,
       lscsm,
       der,
       bounds,
       learning_rate=0.1,
       num_steps=100,
       batch_size=100):
    num_pres, num_neurons = numpy.shape(X)
    r = numbergen.UniformRandom(seed=513)
    mins = numpy.array(zip(*bounds)[0])
    maxs = numpy.array(zip(*bounds)[1])

    for i in xrange(0, num_steps):
        K = K - learning_rate * der(K[:])
        K = numpy.array(K)
        above_bounds = K > maxs
        below_bounds = K < mins

        if (numpy.sum(above_bounds) + numpy.sum(below_bounds)) > 0:
            K[numpy.nonzero(above_bounds)] = maxs[numpy.nonzero(above_bounds)]
            K[numpy.nonzero(below_bounds)] = mins[numpy.nonzero(below_bounds)]

        index = int(r() * (num_pres - batch_size))
        lscsm.X.value = X[index:index + batch_size, :]
        lscsm.Y.value = Y[index:index + batch_size, :]

    return K
Example #3
0
 def test_range(self):
     lbound = 2.0
     ubound = 5.0
     gen = numbergen.UniformRandom(seed=_seed, lbound=lbound, ubound=ubound)
     for _ in xrange(_iterations):
         value = gen()
         self.assertTrue(lbound <= value < ubound)
Example #4
0
class Jitter(CoordinateMapperFn):
    """
    Additively modifies calculated x,y coordinates, e.g. with random noise.
    """

    scale = param.Parameter(default=0.0,doc="Amount of jitter.")

    gen = param.Parameter(default=numbergen.UniformRandom(),doc=
        "Number generator to use, typically a random distribution.")

    def __call__(self,x,y):
        return x+(self.gen()-0.5)*self.scale,y+(self.gen()-0.5)*self.scale
Example #5
0
    def test_bug__dynamic_param_advanced_by_repr(self):
        """Check for bug where repr of a PatternGenerator causes a DynamicNumber to change."""
        # CEB: can probably remove this test now we have time-controlled dynamic parameters
        import topo

        p=PatternGenerator(x=numbergen.UniformRandom(lbound=-1,ubound=1,seed=1))

        x0 = p.x
        topo.sim.run(1)
        x1 = p.x
        self.assertNotEqual(x0,x1) # check we have setup something that actually changes

        x2 = p.inspect_value('x')
        repr(p)
        x3 = p.inspect_value('x')
        self.assertEqual(x2,x3) # value of x should not have been changed by repr(p)
Example #6
0
def phase_preference_scatter_plot(sheet_name, diameter=0.39):
    r = numbergen.UniformRandom(seed=1023)
    preference_map = topo.sim[sheet_name].sheet_views['PhasePreference']
    offset_magnitude = 0.03
    datax = []
    datay = []
    (v, bb) = preference_map.view()
    for z in zeros(66):
        x = (r() - 0.5) * 2 * diameter
        y = (r() - 0.5) * 2 * diameter
        rand = r()
        xoff = sin(rand * 2 * pi) * offset_magnitude
        yoff = cos(rand * 2 * pi) * offset_magnitude
        xx = max(min(x + xoff, diameter), -diameter)
        yy = max(min(y + yoff, diameter), -diameter)
        x = max(min(x, diameter), -diameter)
        y = max(min(y, diameter), -diameter)
        [xc1, yc1] = topo.sim[sheet_name].sheet2matrixidx(xx, yy)
        [xc2, yc2] = topo.sim[sheet_name].sheet2matrixidx(x, y)
        if ((xc1 == xc2) & (yc1 == yc2)): continue
        datax = datax + [v[xc1, yc1]]
        datay = datay + [v[xc2, yc2]]

    for i in range(0, len(datax)):
        datax[i] = datax[i] * 360
        datay[i] = datay[i] * 360
        if (datay[i] > datax[i] + 180): datay[i] = datay[i] - 360
        if ((datax[i] > 180) & (datay[i] > 180)):
            datax[i] = datax[i] - 360
            datay[i] = datay[i] - 360
        if ((datax[i] > 180) & (datay[i] < (datax[i] - 180))):
            datax[i] = datax[i] - 360
            #datay[i] = datay[i] - 360

    f = pylab.figure()
    ax = f.add_subplot(111, aspect='equal')
    pylab.plot(datax, datay, 'ro')
    pylab.plot([0, 360], [-180, 180])
    pylab.plot([-180, 180], [0, 360])
    pylab.plot([-180, -180], [360, 360])
    ax.axis([-180, 360, -180, 360])
    pylab.xticks([-180, 0, 180, 360], [-180, 0, 180, 360])
    pylab.yticks([-180, 0, 180, 360], [-180, 0, 180, 360])
    pylab.grid()
    pylab.savefig(
        normalize_path(str(topo.sim.timestr()) + sheet_name + "_scatter.png"))
Example #7
0
def test_test_pattern():
    """Check that test pattern window is working."""
    tp = topo.guimain['Simulation']['Test Pattern']()
    act = topo.guimain['Plots']['Activity']()

    tp.gui_set_param('edit_sheet', 'GS')

    ## Test for state_push bug (simulation not run() before Present pressed)
    assert len(topo.sim.eps_to_start
               ) > 0, "test must be run before simulation is run()"
    from topo.pattern import Gaussian
    from topo import numbergen
    topo.sim['GS'].set_input_generator(Gaussian(x=numbergen.UniformRandom()))
    tp.Present()
    topo.sim.run(1)
    act1 = copy.deepcopy(topo.sim['GS'].activity)
    topo.sim.run(2)
    assert_array_not_equal(topo.sim['GS'].activity, act1,
                           "GeneratorSheet no longer generating patterns")
    ##

    tp.gui_set_param('pattern_generator', 'TwoRectangles')
    from topo.pattern import TwoRectangles
    assert isinstance(tp.pattern_generator,
                      TwoRectangles), "Pattern generator did not change."

    preview = _get_named_plot('GS', tp.plotgroup.plots).view_dict.get(
        'Strength', {})['Activity'].top.data
    two_rectangles = array([[0., 1], [1., 0.]])
    assert_array_equal(preview, two_rectangles,
                       "Incorrect pattern in preview plot.")

    tp.Present()
    gs_view = _get_named_plot('GS', act.plotgroup.plots).view_dict.get(
        'Strength', {})['Activity']
    assert gs_view.metadata.src_name == 'GS'
    gs_plot_array = gs_view.top.data
    assert_array_equal(gs_plot_array, two_rectangles,
                       "Incorrect pattern in activity plot after Present.")

    tp.params_frame.gui_set_param('scale', 0.5)
    preview = _get_named_plot('GS', tp.plotgroup.plots).view_dict.get(
        'Strength', {})['Activity'].top.data
    assert_array_equal(preview, 0.5 * two_rectangles,
                       "Changing pattern parameters did not update preview.")

    ### Defaults button

    # first change several more parameters
    initial_preview = tp.plotgroup.plots[0].view_dict.get(
        'Strength', {})['Activity'].top.data

    new_param_values = [  #('output_fns','Sigmoid'),
        ('scale', '2')
    ]

    for name, value in new_param_values:
        tp.params_frame.gui_set_param(name, value)

    changed_preview = _get_named_plot('GS', tp.plotgroup.plots).view_dict.get(
        'Strength', {})['Activity'].top.data
    # and check the preview did change
    try:
        assert_array_equal(changed_preview, initial_preview)
    except AssertionError:
        pass
    else:
        raise AssertionError("Test pattern didn't change.")

    # test that preview display is correct
    tp.params_frame.Defaults()
    preview = _get_named_plot('GS', tp.plotgroup.plots).view_dict.get(
        'Strength', {})['Activity'].top.data
    assert_array_equal(
        preview, two_rectangles,
        "Defaults button failed to revert params to default values.")
Example #8
0
 def setUp(self):
     self.g1 = Gaussian(x=numbergen.UniformRandom())
     self.g2 = Gaussian(x=numbergen.UniformRandom())
     self.s = Selector(generators=[self.g1,self.g2])
     self.s.set_dynamic_time_fn(None,'generators')