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()
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!")
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 __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 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)
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])
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")
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')
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
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()
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()
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()