Example #1
0
def exercise1_3(N=200,P=50,tests=100):
    print "Exercise 1.3:"
    h = HopfieldNetwork()
    error = zeros((P,tests),float)
    for p in range(P):
        for q in range(tests):
            if p > 0:
                r = np.random.randint(0,p)
            else:
                r = 0
            error[p,q]=(h.run(N, P=p+1, mu=r, flip_ratio=0.1, bPlot=False))
    print error;
    stdev=np.std(error,axis=1)
    meanvalues=np.mean(error,axis=1)
        
    fig = figure()
    ax1 = fig.add_subplot(111)
    lp = errorbar(range(1,P+1),meanvalues,stdev,color='g')
    bp = boxplot(transpose(error))
    axhline(y=0.02,linewidth=1, color='r')
    xticks(arange(0,P+1,P/10))
    setp(lp,color='black')
    ax1.set_ylim(0,0.5)
    ax1.yaxis.grid(True,linestyle='-',which='major',
        color=(0.2,0.2,0.2),alpha=0.5)
    ax1.set_axisbelow(True)
    ax1.set_title('Mean retrieval error over different'
        'network realizations (N=%d, tests=%d)' % (N,tests) )
    ax1.set_ylabel('Mean retrieval error')
    ax1.set_xlabel('Dictonary size P')
    savefig('../tex/dat/ex1_3-error_avg-N%d-P%d-Q%d.png' % (N,P,tests))
    close()
Example #2
0
def show_one(hopfield_net, rows_no, cols_no, patterns, args):
    # Choose a pattern
    original_pattern = choice(patterns)
    hopfield_net.reset(original_pattern)
    hopfield_net.display_as_matrix(rows_no, cols_no, msg='Original pattern')
    # hopfield_net.display_as_image(rows_no, cols_no)

    # Apply noise to it
    noisy_pattern = apply_noise(original_pattern, args.noise)  # apply noise
    hopfield_net.reset(noisy_pattern)  # The net starts from the noisy pattern
    hopfield_net.display_as_matrix(rows_no, cols_no, msg='Noisy pattern')
    # hopfield_net.display_as_image(rows_no, cols_no)

    # Let the network reach an energetic mimimum
    hopfield_net.convergence_test = False
    while not hopfield_net.is_energy_minimal():
        hopfield_net.single_update()
        hopfield_net.display_as_matrix(rows_no, cols_no, msg='After update')
        print("Energy: %f" % hopfield_net.energy())

    # hopfield_net.display_as_image(rows_no, cols_no)

    if original_pattern == HopfieldNetwork.state_to_string(hopfield_net.state):
        print("Recovered OK")
    else:
        print("NOT RECOVERED OK")

    print("Done!")
Example #3
0
 def __init__(self, interpreter=None, parent=None):
     # initialization of the superclass
     super(DesignerMainWindow, self).__init__(parent)
     # setup the GUI --> function generated by pyuic4
     self.setupUi(self)
     self.hop = HopfieldNetwork(100)
     self.hop.setClocksHopfield()
     self.defaultButtonState()
     self.mem1 = []
     self.mem2 = []
     self.mem3 = []
     self.mem4 = []
     self.input = []
     self.connectElements()
     self.runCount = 0
     self.runPushButton.setEnabled(False)
     self.statusbar.showMessage('Hopfield Network Demo')
     self.inputChanged = False
Example #4
0
 def __init__(self, interpreter=None, parent=None):
     # initialization of the superclass
     super(DesignerMainWindow, self).__init__(parent)
     # setup the GUI --> function generated by pyuic4
     self.setupUi(self)
     self.hop = HopfieldNetwork(100)
     self.hop.setClocksHopfield()
     self.defaultButtonState()
     self.mem1 = []
     self.mem2 = []
     self.mem3 = []
     self.mem4 = []
     self.input = []
     self.connectElements()
     self.runCount = 0
     self.runPushButton.setEnabled(False)
     self.statusbar.showMessage("Hopfield Network Demo")
     self.inputChanged = False
Example #5
0
def test_hopfield(hopfield_net, patterns, args):
    ########################## TASK 2: Testarea retelei #######################
    # args.test_no - numarul de sabloane ce vor fi testate
    # intoarce acuratetea
    count_correct = 0

    for original_pattern in patterns:
        hopfield_net.reset(original_pattern)
        hopfield_net.display_as_matrix(rows_no,
                                       cols_no,
                                       msg='Original pattern')
        # hopfield_net.display_as_image(rows_no, cols_no)

        # Apply noise to it
        noisy_pattern = apply_noise(original_pattern,
                                    args.noise)  # apply noise
        hopfield_net.reset(
            noisy_pattern)  # The net starts from the noisy pattern
        hopfield_net.display_as_matrix(rows_no, cols_no, msg='Noisy pattern')
        # hopfield_net.display_as_image(rows_no, cols_no)

        # Let the network reach an energetic mimimum
        hopfield_net.convergence_test = False
        while not hopfield_net.is_energy_minimal():
            hopfield_net.single_update()
            hopfield_net.display_as_matrix(rows_no,
                                           cols_no,
                                           msg='After update')
            print("Energy: %f" % hopfield_net.energy())

        # hopfield_net.display_as_image(rows_no, cols_no)
        if original_pattern == HopfieldNetwork.state_to_string(
                hopfield_net.state):
            count_correct += 1
            print("Recovered OK")

    return count_correct / len(patterns)
Example #6
0
    length = len(v1)
    for i in range(length):
        if v1[i] != v2[i]:
            diff += 1
    diff /= length
    return diff


countOfPatterns = 2
size = 100
#vectors = csv_parser.read_input('SN_projekt3/animals-14x9.csv')
vectors = PngReader.getSomeBitmaps(countOfPatterns, 'pokemon' + str(size))
width = size
height = size

hn = HopfieldNetwork(height * width, countOfPatterns, False, 0.1, 1)

result = hn.train(vectors)
print("Result: ", result)
f, axarr = plt.pyplot.subplots(countOfPatterns, 2)

for i in range(countOfPatterns):
    axarr[i, 0].imshow(Img.vector_to_img(
        vectors[i],
        height,
        width,
        False,
    ))
    axarr[i, 1].imshow(Img.vector_to_img(hn.Z[i], height, width, False))
    diff = calculateDiff(vectors[i], hn.Z[i])
    plt.pyplot.sca(axarr[i, 1])
Example #7
0
class DesignerMainWindow(QtGui.QMainWindow, Ui_MainWindow):
    """Customization for Qt Designer created window"""

    def __init__(self, interpreter=None, parent=None):
        # initialization of the superclass
        super(DesignerMainWindow, self).__init__(parent)
        # setup the GUI --> function generated by pyuic4
        self.setupUi(self)
        self.hop = HopfieldNetwork(100)
        self.hop.setClocksHopfield()
        self.defaultButtonState()
        self.mem1 = []
        self.mem2 = []
        self.mem3 = []
        self.mem4 = []
        self.input = []
        self.connectElements()
        self.runCount = 0
        self.runPushButton.setEnabled(False)
        self.statusbar.showMessage("Hopfield Network Demo")
        self.inputChanged = False

    def defaultButtonState(self):
        self.mem1PushButton.setEnabled(False)
        self.mem2PushButton.setEnabled(False)
        self.mem3PushButton.setEnabled(False)
        self.mem4PushButton.setEnabled(False)
        self.inputPushButton.setEnabled(False)

    def connectElements(self):
        self.connect(self.clearDisplayPushButton, QtCore.SIGNAL("clicked()"), self.clearDisplay)
        self.connect(self.memorizePushButton, QtCore.SIGNAL("clicked()"), self.memorizePattern)
        self.connect(self.randomizePushButton, QtCore.SIGNAL("clicked()"), self.randomizePattern)
        self.connect(self.clearMemPushButton, QtCore.SIGNAL("clicked()"), self.clearMemory)
        self.connect(self.runPushButton, QtCore.SIGNAL("clicked()"), self.runStep)
        self.connect(self.mem1PushButton, QtCore.SIGNAL("clicked()"), self.retriveMem1)
        self.connect(self.mem2PushButton, QtCore.SIGNAL("clicked()"), self.retriveMem2)
        self.connect(self.mem3PushButton, QtCore.SIGNAL("clicked()"), self.retriveMem3)
        self.connect(self.mem4PushButton, QtCore.SIGNAL("clicked()"), self.retriveMem4)
        self.connect(self.inputPushButton, QtCore.SIGNAL("clicked()"), self.retriveInput)
        self.connect(self.saveInputPushButton, QtCore.SIGNAL("clicked()"), self.saveInput)
        self.connect(self.aPushButton, QtCore.SIGNAL("clicked()"), self.retriveA)
        self.connect(self.bPushButton, QtCore.SIGNAL("clicked()"), self.retriveB)
        self.connect(self.cPushButton, QtCore.SIGNAL("clicked()"), self.retriveC)
        self.connect(self.dPushButton, QtCore.SIGNAL("clicked()"), self.retriveD)
        self.connect(self.computeSynWeightsPushButton, QtCore.SIGNAL("clicked()"), self.computeAllWeights)

    def saveInput(self):
        print "saving current pattern as input"
        inpList = []
        for i in range(100):
            exec (("inpList.append(int(self.pushButton_%s.isChecked()))" % i))
        self.input = inpList
        self.inputPushButton.setEnabled(True)
        self.inputChanged = True
        self.runCount = 0

    def computeAllWeights(self):
        self.statusbar.showMessage("Computing synaptic weights")
        self.hop.assignAllSynapticWeights()  # weights are assigned
        self.runPushButton.setEnabled(True)

    def runStep(self):
        self.statusbar.showMessage("Running")

        if self.inputChanged:
            inputPattern = self.input
            self.hop.updateInputs(inputPattern)  # input updating
            self.hop.mooseReinit()
            self.hop.runMooseHopfield(0.0310)

        if self.runCount == 0:
            for i in range(100):
                if np.any((self.hop.allSpikes[i].vector > 0.0) & (self.hop.allSpikes[i].vector < 0.0310)):
                    exec (("self.pushButton_%s.setChecked(True)" % i))
                else:
                    exec (("self.pushButton_%s.setChecked(False)" % i))

        else:
            self.hop.runMooseHopfield(0.02)
            # print 0.0310+(0.02*(self.runCount-1)),(0.0310+(0.02*self.runCount))
            for i in range(100):
                if np.any(
                    (self.hop.allSpikes[i].vector > (0.0301 + (0.02 * (self.runCount - 1))))
                    & (self.hop.allSpikes[i].vector < (0.0301 + (0.02 * self.runCount)))
                ):
                    exec (("self.pushButton_%s.setChecked(True)" % i))
                else:
                    exec (("self.pushButton_%s.setChecked(False)" % i))

        self.runCount += 1
        self.statusbar.showMessage("Done Running")

    def retriveMem1(self):
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(self.mem1[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Mem1")

    def retriveMem2(self):
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(self.mem2[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Mem2")

    def retriveMem3(self):
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(self.mem3[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Mem3")

    def retriveMem4(self):
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(self.mem4[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Mem4")

    def retriveInput(self):
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(self.input[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Input")

    def retriveA(self):
        a = [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
        ]
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(a[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Sample A")

    def retriveB(self):
        b = [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
        ]
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(b[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Sample B")

    def retriveC(self):
        c = [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
        ]
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(c[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Sample C")

    def retriveD(self):
        d = [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
        ]
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(d[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Sample D")

    def clearMemory(self):
        self.hop.clearAllMemory()
        self.clearDisplay()
        self.defaultButtonState()
        self.mem1 = []
        self.mem2 = []
        self.mem3 = []
        self.input = []
        self.statusbar.showMessage("Cleared all Memory")
        self.runPushButton.setEnabled(False)
        self.inputPushButton.setEnabled(False)
        self.runCount = 0

    def randomizePattern(self):
        r = np.random.randint(2, size=100)
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(r[int(%s)])" % (i, i)))

    def memorizePattern(self):
        pattern = []
        for i in range(100):
            exec (("pattern.append(int(self.pushButton_%s.isChecked()))" % i))

        self.hop.updateWeights(pattern)

        for k in range(100):  # very weird that I have to do this!
            if pattern[k] == -1:
                pattern[k] = 0

        savedAlready = self.hop.numMemories
        if savedAlready == 1:
            self.mem1 = pattern
            self.mem1PushButton.setEnabled(True)
            # print pattern
        elif savedAlready == 2:
            self.mem2 = pattern
            self.mem2PushButton.setEnabled(True)
            # print pattern
        elif savedAlready == 3:
            self.mem3 = pattern
            self.mem3PushButton.setEnabled(True)
        elif savedAlready == 4:
            self.mem4 = pattern
            self.mem4PushButton.setEnabled(True)

        self.runPushButton.setEnabled(False)

        self.statusbar.showMessage("New Pattern Memorised")

    def clearDisplay(self):
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(False)" % i))
        self.statusbar.showMessage("Cleared display")
Example #8
0
class DesignerMainWindow(QtGui.QMainWindow, Ui_MainWindow):
    """Customization for Qt Designer created window"""
    def __init__(self, interpreter=None, parent=None):
        # initialization of the superclass
        super(DesignerMainWindow, self).__init__(parent)
        # setup the GUI --> function generated by pyuic4
        self.setupUi(self)
        self.hop = HopfieldNetwork(100)
        self.hop.setClocksHopfield()
        self.defaultButtonState()
        self.mem1 = []
        self.mem2 = []
        self.mem3 = []
        self.mem4 = []
        self.input = []
        self.connectElements()
        self.runCount = 0
        self.runPushButton.setEnabled(False)
        self.statusbar.showMessage('Hopfield Network Demo')
        self.inputChanged = False

    def defaultButtonState(self):
        self.mem1PushButton.setEnabled(False)
        self.mem2PushButton.setEnabled(False)
        self.mem3PushButton.setEnabled(False)
        self.mem4PushButton.setEnabled(False)
        self.inputPushButton.setEnabled(False)

    def connectElements(self):
        self.connect(self.clearDisplayPushButton, QtCore.SIGNAL('clicked()'),
                     self.clearDisplay)
        self.connect(self.memorizePushButton, QtCore.SIGNAL('clicked()'),
                     self.memorizePattern)
        self.connect(self.randomizePushButton, QtCore.SIGNAL('clicked()'),
                     self.randomizePattern)
        self.connect(self.clearMemPushButton, QtCore.SIGNAL('clicked()'),
                     self.clearMemory)
        self.connect(self.runPushButton, QtCore.SIGNAL('clicked()'),
                     self.runStep)
        self.connect(self.mem1PushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveMem1)
        self.connect(self.mem2PushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveMem2)
        self.connect(self.mem3PushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveMem3)
        self.connect(self.mem4PushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveMem4)
        self.connect(self.inputPushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveInput)
        self.connect(self.saveInputPushButton, QtCore.SIGNAL('clicked()'),
                     self.saveInput)
        self.connect(self.aPushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveA)
        self.connect(self.bPushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveB)
        self.connect(self.cPushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveC)
        self.connect(self.dPushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveD)
        self.connect(self.computeSynWeightsPushButton,
                     QtCore.SIGNAL('clicked()'), self.computeAllWeights)

    def saveInput(self):
        print 'saving current pattern as input'
        inpList = []
        for i in range(100):
            exec(('inpList.append(int(self.pushButton_%s.isChecked()))' % i))
        self.input = inpList
        self.inputPushButton.setEnabled(True)
        self.inputChanged = True
        self.runCount = 0

    def computeAllWeights(self):
        self.statusbar.showMessage('Computing synaptic weights')
        self.hop.assignAllSynapticWeights()  #weights are assigned
        self.runPushButton.setEnabled(True)

    def runStep(self):
        self.statusbar.showMessage('Running')

        if self.inputChanged:
            inputPattern = self.input
            self.hop.updateInputs(inputPattern)  #input updating
            self.hop.mooseReinit()
            self.hop.runMooseHopfield(0.0310)

        if self.runCount == 0:
            for i in range(100):
                if np.any((self.hop.allSpikes[i].vector > 0.0)
                          & (self.hop.allSpikes[i].vector < 0.0310)):
                    exec(('self.pushButton_%s.setChecked(True)' % i))
                else:
                    exec(('self.pushButton_%s.setChecked(False)' % i))

        else:
            self.hop.runMooseHopfield(0.02)
            #print 0.0310+(0.02*(self.runCount-1)),(0.0310+(0.02*self.runCount))
            for i in range(100):
                if np.any((self.hop.allSpikes[i].vector >
                           (0.0301 + (0.02 * (self.runCount - 1))))
                          & (self.hop.allSpikes[i].vector <
                             (0.0301 + (0.02 * self.runCount)))):
                    exec(('self.pushButton_%s.setChecked(True)' % i))
                else:
                    exec(('self.pushButton_%s.setChecked(False)' % i))

        self.runCount += 1
        self.statusbar.showMessage('Done Running')

    def retriveMem1(self):
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(self.mem1[int(%s)])' %
                  (i, i)))
        self.statusbar.showMessage('Showing Mem1')

    def retriveMem2(self):
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(self.mem2[int(%s)])' %
                  (i, i)))
        self.statusbar.showMessage('Showing Mem2')

    def retriveMem3(self):
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(self.mem3[int(%s)])' %
                  (i, i)))
        self.statusbar.showMessage('Showing Mem3')

    def retriveMem4(self):
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(self.mem4[int(%s)])' %
                  (i, i)))
        self.statusbar.showMessage('Showing Mem4')

    def retriveInput(self):
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(self.input[int(%s)])' %
                  (i, i)))
        self.statusbar.showMessage('Showing Input')

    def retriveA(self):
        a = [
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
            0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1,
            0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0,
            0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
        ]
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(a[int(%s)])' % (i, i)))
        self.statusbar.showMessage('Showing Sample A')

    def retriveB(self):
        b = [
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1,
            0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,
            1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
        ]
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(b[int(%s)])' % (i, i)))
        self.statusbar.showMessage('Showing Sample B')

    def retriveC(self):
        c = [
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
        ]
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(c[int(%s)])' % (i, i)))
        self.statusbar.showMessage('Showing Sample C')

    def retriveD(self):
        d = [
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1,
            0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,
            1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
        ]
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(d[int(%s)])' % (i, i)))
        self.statusbar.showMessage('Showing Sample D')

    def clearMemory(self):
        self.hop.clearAllMemory()
        self.clearDisplay()
        self.defaultButtonState()
        self.mem1 = []
        self.mem2 = []
        self.mem3 = []
        self.input = []
        self.statusbar.showMessage('Cleared all Memory')
        self.runPushButton.setEnabled(False)
        self.inputPushButton.setEnabled(False)
        self.runCount = 0

    def randomizePattern(self):
        r = np.random.randint(2, size=100)
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(r[int(%s)])' % (i, i)))

    def memorizePattern(self):
        pattern = []
        for i in range(100):
            exec(('pattern.append(int(self.pushButton_%s.isChecked()))' % i))

        self.hop.updateWeights(pattern)

        for k in range(100):  #very weird that I have to do this!
            if pattern[k] == -1:
                pattern[k] = 0

        savedAlready = self.hop.numMemories
        if savedAlready == 1:
            self.mem1 = pattern
            self.mem1PushButton.setEnabled(True)
            #print pattern
        elif savedAlready == 2:
            self.mem2 = pattern
            self.mem2PushButton.setEnabled(True)
            #print pattern
        elif savedAlready == 3:
            self.mem3 = pattern
            self.mem3PushButton.setEnabled(True)
        elif savedAlready == 4:
            self.mem4 = pattern
            self.mem4PushButton.setEnabled(True)

        self.runPushButton.setEnabled(False)

        self.statusbar.showMessage('New Pattern Memorised')

    def clearDisplay(self):
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(False)' % i))
        self.statusbar.showMessage('Cleared display')
Example #9
0
def train_hopfield(rows_no, cols_no, patterns, args):
    hopfield_net = HopfieldNetwork(rows_no * cols_no)
    hopfield_net.learn_patterns(patterns, args.train_lr)
    return hopfield_net
Example #10
0
def exercise1_1(N=200,P=5,c=0.2):
    print "Exercise 1.1:"
    h = HopfieldNetwork()
    h.run(N=N, P=P, flip_ratio=c, bPlot=True)
    savefig('../tex/dat/ex1_1-energy_overlap-N%d-P%d-c%d.png' % (N,P,c*100))
    close()
Example #11
0
def testAllNetworks():
	fileHandle = open(RESULT_FILE, 'w', 0)
	appendHtmlHeader(fileHandle)

	path = 'signs/'

	images = [path+f for f in listdir(path)]

	print images

	netHebb      = HopfieldNetwork(SIDE_OF_ARRAY*SIDE_OF_ARRAY)
	netPseudoInv = HopfieldNetwork(SIDE_OF_ARRAY*SIDE_OF_ARRAY)
	netDelta     = HopfieldNetwork(SIDE_OF_ARRAY*SIDE_OF_ARRAY)

	for image in images:
		print "Learning image " + image
		imageName = image
		imgProc = ImgPreprocessor(image,SIDE_OF_ARRAY,127)
		image = imgProc.getImageForHopfield().copy()

		cv2.imshow('test',imgProc.getImage())
		ImageSaver(imageName.replace('signs','results'), imgProc.getImage(),SIDE_OF_ARRAY)
		netHebb.trainHebb(image)
		netDelta.trainDelta(image)
		netPseudoInv.appendTrainingVectorForPseudoInversion(image)

	netPseudoInv.trainPseudoInversion()

	print "Learning done"
	#noise processing
	for image in images:
		tmpImage = image
		for noiseFactor in [0.05, 0.10, 0.15]:
			image = tmpImage
			fileHandle.write('<tr>\n')
			start = time.time()
			print "Noise factor: " + str(int(noiseFactor*100)) + "%"
			print "Processing image " + image

			imageName = image

			fileHandle.write('<td>\n')
			fileHandle.write(imageName.replace('signs/','').replace('.png','') +'     '+ '<img src=' + imageName.replace('signs','results') + '>')
			fileHandle.write('\n')
			fileHandle.write('</td>\n')
			
			fileHandle.write('<td>\n')
			fileHandle.write('Szum: ' + str(int(noiseFactor*100)) +'%')
			fileHandle.write('\n')
			fileHandle.write('</td>\n')

			imgProc = ImgPreprocessor(image,SIDE_OF_ARRAY,127)
			image = imgProc.getImageForHopfield().copy()
			image = ImageNoise(image, noiseFactor).get()
			ImageSaver(imageName.replace('signs/','results/rec_noise_' + str(int(noiseFactor*100)) + '_'), image,SIDE_OF_ARRAY)
			
			fileHandle.write('<td>\n')
			fileHandle.write('<img src=' + imageName.replace('signs/','results/rec_noise_' + str(int(noiseFactor*100)) + '_') + '>')
			fileHandle.write('\n')
			fileHandle.write('</td>\n')	

			netPseudoInv.initNeurons(image)
			netDelta.initNeurons(image)
			netHebb.initNeurons(image)
			
			netHebb.updateUntilSatisfied()
			ImageSaver(imageName.replace('signs/','results/hebb_noise_' + str(int(noiseFactor*100)) + '_'), netHebb.getNeuronsMatrix(),SIDE_OF_ARRAY)
			netDelta.updateUntilSatisfied()
			ImageSaver(imageName.replace('signs/','results/delta_noise_' + str(int(noiseFactor*100)) + '_'), netDelta.getNeuronsMatrix(),SIDE_OF_ARRAY)
			netPseudoInv.updateUntilSatisfied()
			ImageSaver(imageName.replace('signs/','results/pinv_noise_' + str(int(noiseFactor*100)) + '_'), netPseudoInv.getNeuronsMatrix(),SIDE_OF_ARRAY)
			end = time.time()

			fileHandle.write('<td>\n')
			fileHandle.write('<img src=' + imageName.replace('signs/','results/hebb_noise_' + str(int(noiseFactor*100)) + '_') + '>')
			fileHandle.write('\n')
			fileHandle.write('</td>\n')

			fileHandle.write('<td>\n')
			fileHandle.write('<img src=' + imageName.replace('signs/','results/delta_noise_' + str(int(noiseFactor*100)) + '_') + '>')
			fileHandle.write('\n')
			fileHandle.write('</td>\n')	

			fileHandle.write('<td>\n')
			fileHandle.write('<img src=' + imageName.replace('signs/','results/pinv_noise_' + str(int(noiseFactor*100)) + '_') + '>')
			fileHandle.write('\n')
			fileHandle.write('</td>\n')

			print "Time elapsed " + str(int(end-start)) + " [s]"
			fileHandle.write('</tr>\n')

	#lines processing 
	for image in images:
		tmpImage = image
		for linesEvery in [16,8]:
			image = tmpImage
			fileHandle.write('<tr>\n')
			start = time.time()
			print "Lines every: " + str(int(linesEvery)) 
			print "Processing image " + image
			imageName = image

			fileHandle.write('<td>\n')
			fileHandle.write(imageName.replace('signs/','').replace('.png','') +'     '+ '<img src=' + imageName.replace('signs','results') + '>')
			fileHandle.write('\n')
			fileHandle.write('</td>\n')
			
			fileHandle.write('<td>\n')
			fileHandle.write('Linie co: ' + str(int(linesEvery)))
			fileHandle.write('\n')
			fileHandle.write('</td>\n')

			imgProc = ImgPreprocessor(image,SIDE_OF_ARRAY,127)
			image = imgProc.getImageForHopfield().copy()
			image = ImageLines(image, linesEvery).get()
			ImageSaver(imageName.replace('signs/','results/rec_lines_' + str(linesEvery) + '_'), image,SIDE_OF_ARRAY)

			fileHandle.write('<td>\n')
			fileHandle.write('<img src=' + imageName.replace('signs/','results/rec_lines_' + str(linesEvery) + '_') + '>')
			fileHandle.write('\n')
			fileHandle.write('</td>\n')	

			netPseudoInv.initNeurons(image)
			netDelta.initNeurons(image)
			netHebb.initNeurons(image)
			
			netHebb.updateUntilSatisfied()
			ImageSaver(imageName.replace('signs/','results/hebb_lines_' + str(linesEvery) + '_'), netHebb.getNeuronsMatrix(),SIDE_OF_ARRAY)
			netDelta.updateUntilSatisfied()
			ImageSaver(imageName.replace('signs/','results/delta_lines_' + str(linesEvery) + '_'), netDelta.getNeuronsMatrix(),SIDE_OF_ARRAY)
			netPseudoInv.updateUntilSatisfied()
			ImageSaver(imageName.replace('signs/','results/pinv_lines_' + str(linesEvery) + '_'), netPseudoInv.getNeuronsMatrix(),SIDE_OF_ARRAY)
			end = time.time()

			fileHandle.write('<td>\n')
			fileHandle.write('<img src=' + imageName.replace('signs/','results/hebb_lines_' + str(linesEvery) + '_') + '>')
			fileHandle.write('\n')
			fileHandle.write('</td>\n')

			fileHandle.write('<td>\n')
			fileHandle.write('<img src=' + imageName.replace('signs/','results/delta_lines_' + str(linesEvery) + '_') + '>')
			fileHandle.write('\n')
			fileHandle.write('</td>\n')	

			fileHandle.write('<td>\n')
			fileHandle.write('<img src=' + imageName.replace('signs/','results/pinv_lines_' + str(linesEvery) + '_') + '>')
			fileHandle.write('\n')
			fileHandle.write('</td>\n')

			print "Time elapsed " + str(int(end-start)) + " [s]"
			fileHandle.write('</tr>\n')

	appendHtmlFooter(fileHandle)
	fileHandle.close()
Example #12
0
	def main(self):
		SIDE_OF_ARRAY = 32

		F  = npyscreen.Form(name = "Road signs recognition via Hopfield Network",)
		F.add(npyscreen.TitleFixedText, name = "Using dimensions: " + str(SIDE_OF_ARRAY) + "x" + str(SIDE_OF_ARRAY),)

		netHebb      = HopfieldNetwork(SIDE_OF_ARRAY*SIDE_OF_ARRAY)
		netPseudoInv = HopfieldNetwork(SIDE_OF_ARRAY*SIDE_OF_ARRAY)
		netDelta     = HopfieldNetwork(SIDE_OF_ARRAY*SIDE_OF_ARRAY)
		F.add(npyscreen.TitleFixedText, name = "Network instances initialized",)
		F.display()

		signsList, imgToRecogn = self.loadParameters(sys.argv)
		F.add(npyscreen.TitleFixedText, name = "Image to recognize: " + imgToRecogn,)
		images = list()
		for image in signsList:
			imageName = image
			imgProc = ImgPreprocessor(image,SIDE_OF_ARRAY,127)
			image = imgProc.getImageForHopfield().copy()
			#print image
			F.add(npyscreen.TitleFixedText, name = "Image to learn: " + imageName,)
			F.display()
			images.append(image)
			netHebb.trainHebb(image)
			netDelta.trainDelta(image)
			netPseudoInv.appendTrainingVectorForPseudoInversion(image)

		netPseudoInv.trainPseudoInversion()
		F.add(npyscreen.TitleFixedText, name = "Networks teached by above images",)
		F.display()
		imgProc  = ImgPreprocessor(imgToRecogn,SIDE_OF_ARRAY,127)
		imageRec = imgProc.getImageForHopfield()

		netHebb.initNeurons(imageRec)
		netDelta.initNeurons(imageRec)
		netPseudoInv.initNeurons(imageRec)

		hebbProgressWidget = F.add(npyscreen.TitleSlider, out_of=100, name  = "Hebb")
		F.add(npyscreen.TitleFixedText, name = " ",)
		deltaProgressWidget = F.add(npyscreen.TitleSlider, out_of=100, name = "Delta")
		F.add(npyscreen.TitleFixedText, name = " ",)
		pInvProgressWidget = F.add(npyscreen.TitleSlider, out_of=100, name  = "PInv")

		for i in range(50):
			netHebb.update(100)
			hebbProgressWidget.value = 2 + i*2
			F.display()

		for i in range(50):
			netDelta.update(100)
			deltaProgressWidget.value = 2 + i*2
			F.display()

		for i in range(50):
			netPseudoInv.update(100)
			pInvProgressWidget.value = 2 + i*2
			F.display()

		networkResultHebb      = netHebb.getNeuronsMatrix().copy()
		networkResultDelta     = netDelta.getNeuronsMatrix().copy()
		networkResultPseudoInv = netPseudoInv.getNeuronsMatrix().copy()

		#netHebb.saveNetworkConfigToFile('networkConfig.txt');
		"""
		#print "================================"
		matchFound = False
		for idx, image in enumerate(images):
			if np.array_equiv(networkResultHebb, image):
				#print "Found matching image as sample " + str(idx)
				matchFound = True
				break
			elif np.array_equiv(self.invertMatrix(networkResultHebb), image):
				#print "Found inverse matching image as sample" + str(idx)
				matchFound = True
				break
		if(not matchFound):
			pass
			#print "Unfortunately no match!"
		#print "================================"
		"""
		subplotIndex = 201
		subplotIndex += 10 * (len(images)+1)
		
		for idx, image in enumerate(images):
			plt.subplot(subplotIndex+idx)
			image2d = np.reshape(image, (SIDE_OF_ARRAY,SIDE_OF_ARRAY))
			plt.imshow(image2d, cmap='gray', interpolation = 'nearest')
			plt.xticks([]), plt.yticks([]), plt.title("Sample %d" % idx)

		newLineSubplotIndex = subplotIndex + len(images)
		plt.subplot(newLineSubplotIndex)
		image2d = np.reshape(imageRec, (SIDE_OF_ARRAY,SIDE_OF_ARRAY))
		plt.imshow(image2d, cmap='gray', interpolation = 'nearest')
		plt.xticks([]), plt.yticks([]), plt.title("To recognize")

		plt.subplot(newLineSubplotIndex+1)
		image2dResult = np.reshape(networkResultHebb , (SIDE_OF_ARRAY,SIDE_OF_ARRAY))
		plt.imshow(image2dResult, cmap='gray', interpolation = 'nearest')
		plt.xticks([]), plt.yticks([]), plt.title("Returned by net (HEBB)")

		plt.subplot(newLineSubplotIndex+2)
		image2dResult = np.reshape(networkResultDelta, (SIDE_OF_ARRAY,SIDE_OF_ARRAY))
		plt.imshow(image2dResult, cmap='gray', interpolation = 'nearest')
		plt.xticks([]), plt.yticks([]), plt.title("Returned by net (DELTA)")

		plt.subplot(newLineSubplotIndex+3)
		image2dResult = np.reshape(networkResultPseudoInv, (SIDE_OF_ARRAY,SIDE_OF_ARRAY))
		plt.imshow(image2dResult, cmap='gray', interpolation = 'nearest')
		plt.xticks([]), plt.yticks([]), plt.title("Returned by net (PINVERSE)")
		plt.show()