Пример #1
0
def test_load_alphabet():
    """Test if the alphabet patterns can be loaded"""
    import neurodynex.hopfield_network.pattern_tools as pattern_tools
    abc_dictionary = pattern_tools.load_alphabet()
    assert 'A' in abc_dictionary, \
        "Alphabet dict not correctly loaded. Key not accessible"
    assert abc_dictionary['A'].shape == (10, 10), \
        "Letter is not of shape (10,10)"
def run_hf_demo_alphabet(letters,
                         initialization_noise_level=0.2,
                         random_seed=None):
    """
    Simple demo

    Args:
        letters:
        initialization_noise_level:
        random_seed:

    Returns:

    """

    # fixed size 10 for the alphabet.
    pattern_size = 10
    # pick some letters we want to store in the network
    if letters is None:
        letters = ['A', 'B', 'C', 'R', 'S', 'X', 'Y', 'Z']
    reference_pattern = 0

    # instantiate a hofpfield network
    hopfield_net = network.HopfieldNetwork(pattern_size**2)
    # for the demo, use a seed to get a reproducible pattern
    np.random.seed(random_seed)
    # load the dictionary
    abc_dict = pattern_tools.load_alphabet()
    # for each key in letters, append the pattern to the list
    pattern_list = [abc_dict[key] for key in letters]
    hfplot.plot_pattern_list(pattern_list)

    hopfield_net.store_patterns(pattern_list)
    hopfield_net.set_state_from_pattern(
        pattern_tools.get_noisy_copy(abc_dict[letters[reference_pattern]],
                                     initialization_noise_level))
    states = hopfield_net.run_with_monitoring(6)
    state_patterns = pattern_tools.reshape_patterns(states,
                                                    pattern_list[0].shape)
    hfplot.plot_state_sequence_and_overlap(state_patterns, pattern_list,
                                           reference_pattern)
    plt.show()
Пример #3
0
def run_hf_demo_alphabet(letters, initialization_noise_level=0.2, random_seed=None):
    """
    Simple demo

    Args:
        letters:
        initialization_noise_level:
        random_seed:

    Returns:

    """

    # fixed size 10 for the alphabet.
    pattern_size = 10
    # pick some letters we want to store in the network
    if letters is None:
        letters = ['A', 'B', 'C', 'R', 'S', 'X', 'Y', 'Z']
    reference_pattern = 0

    # instantiate a hofpfield network
    hopfield_net = network.HopfieldNetwork(pattern_size**2)
    # for the demo, use a seed to get a reproducible pattern
    np.random.seed(random_seed)
    # load the dictionary
    abc_dict = pattern_tools.load_alphabet()
    # for each key in letters, append the pattern to the list
    pattern_list = [abc_dict[key] for key in letters]
    hfplot.plot_pattern_list(pattern_list)

    hopfield_net.store_patterns(pattern_list)
    hopfield_net.set_state_from_pattern(
        pattern_tools.get_noisy_copy(abc_dict[letters[reference_pattern]], initialization_noise_level))
    states = hopfield_net.run_with_monitoring(6)
    state_patterns = pattern_tools.reshape_patterns(states, pattern_list[0].shape)
    hfplot.plot_state_sequence_and_overlap(state_patterns, pattern_list, reference_pattern)
    plt.show()
Пример #4
0
from scipy import *
from lec import *

#nr_neurons
N = 100

# the letters we want to store in the hopfield network
#letter_list = ['A', 'B', 'C', 'D']
#letter_list = ['E', 'F', 'G', 'H', 'I']
#letter_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']
letter_list = ['A', 'B', 'E', 'H', 'I']

# set a seed to reproduce the same noise in the next run
# np.random.seed(123)

abc_dictionary = pattern_tools.load_alphabet()
# create an instance of the class HopfieldNetwork
hopfield_net = network.HopfieldNetwork(nr_neurons=N)
#hopfield_net = network.HopfieldNetwork(nr_neurons= pattern_shape[0]*pattern_shape[1])

# create a list using Pythons List Comprehension syntax:
pattern_list = [abc_dictionary[key] for key in letter_list]
plot_tools.plot_pattern_list(pattern_list)

# how similar are the letter patterns
overlap_matrix = pattern_tools.compute_overlap_matrix(pattern_list)
plot_tools.plot_overlap_matrix(overlap_matrix)

# store the patterns
hopfield_net.store_patterns(pattern_list)
Пример #5
0
import numpy as np
import random
import matplotlib.pyplot as plt
from neurodynex.hopfield_network import network, pattern_tools, plot_tools

add_extra = False

# the letters we want to store in the hopfield network
letter_list = ['N', 'C', 'B', 'S', 'X', 'Y' ]
extra = [ 'P', 'Q' ]
if add_extra == True:
    letter_list += extra

nRows, maxCols = 4, len(letter_list)
abc_dictionary = pattern_tools.load_alphabet()

def add_noise( letter, noise_level = 0.2 ):
    pat = abc_dictionary[letter]
    print( "[INFO ] Adding noise (level=%f) to %s" % (noise_level, letter))
    #  input( "Press any key to continue" )
    #  print( "  to %s" % letter )
    for (i, j), v in np.ndenumerate(pat):
        if random.random() < noise_level:
            pat[i, j] = random.choice( [-1, 1] )
    return pat

def main( plot = True ):
    # set a seed to reproduce the same noise in the next run
    # numpy.random.seed(123)
    
    # access the first element and get it's size (they are all of same size)