예제 #1
0
def fixed_assembly_recip_proj(n=100000, k=317, p=0.01, beta=0.05):
    b = brain.Brain(p, save_winners=True)
    b.add_stimulus("stimA", k)
    b.add_area("A", n, k, beta)
    # Will project fixes A into B
    b.add_area("B", n, k, beta)
    b.project({"stimA": ["A"]}, {})
    print("A.w=" + str(b.areas["A"].w))
    for i in xrange(20):
        b.project({"stimA": ["A"]}, {"A": ["A"]})
        print("A.w=" + str(b.areas["A"].w))
    # Freeze assembly in A and start projecting A <-> B
    b.areas["A"].fix_assembly()
    b.project({}, {"A": ["B"]})
    for i in xrange(20):
        b.project({}, {"A": ["B"], "B": ["A", "B"]})
        print("B.w=" + str(b.areas["B"].w))
    # If B has stabilized, this implies that the A->B direction is stable.
    # Therefore to test that this "worked" we should check that B->A restores A
    print("Before B->A, A.w=" + str(b.areas["A"].w))
    b.areas["A"].unfix_assembly()
    b.project({}, {"B": ["A"]})
    print("After B->A, A.w=" + str(b.areas["A"].w))
    for i in xrange(20):
        b.project({}, {"B": ["A"], "A": ["A"]})
        print("A.w=" + str(b.areas["A"].w))
    overlaps = bu.get_overlaps(b.areas["A"].saved_winners[-22:],
                               0,
                               percentage=True)
    print(overlaps)
예제 #2
0
def pattern_com_repeated(n=100000, k=317, p=0.05, beta=0.05, project_iter=12, alpha=0.4,
                         trials=3, max_recurrent_iter=10, resample=False):
    b = brain.Brain(p)
    b.add_stimulus("stim", k)
    b.add_area("A", n, k, beta)
    b.project({"stim": ["A"]}, {})
    for i in range(project_iter - 1):
        b.project({"stim": ["A"]}, {"A": ["A"]})

    subsample_size = int(k * alpha)
    rounds_to_completion = []
    # pick random subset of the neurons to fire
    subsample = random.sample(b.areas["A"].winners, subsample_size)
    for trail in range(trials):
        if resample:
            subsample = random.sample(b.areas["A"].winners, subsample_size)
        b.areas["A"].winners = subsample
        rounds = 0
        while True:
            rounds += 1
            b.project({}, {"A": ["A"]})
            if (b.areas["A"].num_first_winners == 0) or (rounds == max_recurrent_iter):
                break
        rounds_to_completion.append(rounds)
    saved_winners = b.areas["A"].saved_winners
    overlaps = bu.get_overlaps(saved_winners, project_iter - 1, percentage=True)
    return overlaps, rounds_to_completion