def main():

    patterns = loadData('pict.dat')  # Pattern 1-11
    patterns_1_3 = [patterns[index, :].reshape(1, 1024) for index in range(3)]
    patterns_4_11 = [
        patterns[3 + index, :].reshape(1, 1024) for index in range(8)
    ]

    network = RNN(size=1024, sequential=False, random=False)
    network.init_weights(patterns_1_3)
    noises = np.arange(0, 100, 5)
    averages = 1000
    for i, pattern in enumerate(patterns_1_3):
        OGpattern = pattern.copy()
        nCorrect = np.zeros((noises.shape[0], 1))
        for k, noise in enumerate(noises):
            for j in range(averages):
                patternD = distort(OGpattern, noise)
                x_output = network.train(patternD)
                nCorrect[k][0] += ((np.count_nonzero(x_output == OGpattern)) /
                                   patternD.shape[1]) * 100

        nCorrect = nCorrect / averages
        plt.plot(noises, nCorrect, label=("Pattern " + str(i + 1)))

    plt.legend()
    plt.show()
def main():

    patterns = loadData('pict.dat')     # Pattern 1-11
    patterns_1_3 = [patterns[index,:].reshape(1,1024) for index in range(3) ]
    patterns_4_11 = [patterns[3+index,:].reshape(1,1024) for index in range(8) ]
    

    network = RNN(size=1024, sequential=False, random=True)
    network.init_weights(patterns_1_3)


    for index, pattern in enumerate(patterns_1_3):
        energi = network.layapunovFunction(pattern)
        print('Energi for pattern {}: {}'.format(index, energi))

    for index, pattern in enumerate(patterns_4_11):
        energi = network.layapunovFunction(pattern)
        print('Energi for distorted pattern {}: {}'.format(3 + index, energi))
def main():

    patterns = loadData('pict.dat')     # Pattern 1-11
    patterns_1_3 = [patterns[index,:].reshape(1,1024) for index in range(3) ]
    patterns_10_11 = [patterns[9+index,:].reshape(1,1024) for index in range(2) ]

    network = RNN(size=1024, sequential=True, random=True)
    network.init_weights(patterns_1_3)




    # Testing if stable
    print('\nTesting if stable: ')
    plt.figure('Attractors - patterns')
    index = 0
    for pattern in patterns_1_3:
        index += 1
        plt.subplot(1, 3, index)
        plt.title('Pattern: {}'.format(index))
        x_output = network.train(pattern)
        print('Number of correct: {}/{} '.format(np.count_nonzero(x_output==pattern), pattern.shape[1]))
        plt.imshow(pattern.reshape(32,32), cmap='gray')





    # Testing for distorted patterns 9 and 10
    print('\nTesting for distorted patterns: ')
    index = 10
    for pattern in patterns_10_11:
        plt.figure('Output - pattern: {}'.format(index))
        index += 1
        sub_index = 0 
        x_output = network.train(pattern)
        for true_pattern in patterns_1_3:
            sub_index += 1
            print('Number of correct: {}/{} '.format(np.count_nonzero(x_output==true_pattern), true_pattern.shape[1]))
        plt.imshow(x_output.reshape(32,32), cmap='gray')
    plt.show()