def trainNetwork(net, networkFile="mnist_net.nta"): # Some stuff we will need later sensor = net.regions['sensor'] sp = net.regions["SP"] pysp = sp.getSelf() classifier = net.regions['classifier'] dutyCycles = numpy.zeros(DEFAULT_SP_PARAMS['columnCount'], dtype=GetNTAReal()) print "============= Loading training images =================" t1 = time.time() sensor.executeCommand(["loadMultipleImages", "mnist/training"]) numTrainingImages = sensor.getParameter('numImages') start = time.time() print "Load time for training images:",start-t1 print "Number of training images",numTrainingImages # First train just the SP print "============= SP training =================" classifier.setParameter('inferenceMode', 0) classifier.setParameter('learningMode', 0) sp.setParameter('learningMode', 0) sp.setParameter('inferenceMode', 1) nTrainingIterations = numTrainingImages for i in range(nTrainingIterations): net.run(1) dutyCycles += pysp._spatialPoolerOutput if i%(nTrainingIterations/100)== 0: print "Iteration",i,"Category:",sensor.getOutputData('categoryOut') # Now train just the classifier sequentially on all training images print "============= Classifier training =================" sensor.setParameter('explorer','Flash') classifier.setParameter('inferenceMode', 0) classifier.setParameter('learningMode', 1) sp.setParameter('learningMode', 0) sp.setParameter('inferenceMode', 1) for i in range(numTrainingImages): net.run(1) if i%(numTrainingImages/100)== 0: print "Iteration",i,"Category:",sensor.getOutputData('categoryOut') # Save the trained network net.save(networkFile) # Print various statistics print "============= Training statistics =================" print "Training time:",time.time() - start tenPct= nTrainingIterations/10 print "My duty cycles:",fdrutilities.numpyStr(dutyCycles, format="%g") print "Number of nonzero duty cycles:",len(dutyCycles.nonzero()[0]) print "Mean/Max duty cycles:",dutyCycles.mean(), dutyCycles.max() print "Number of columns that won for > 10% patterns",\ (dutyCycles>tenPct).sum() print "Number of columns that won for > 20% patterns",\ (dutyCycles>2*tenPct).sum() print "Num categories learned",classifier.getParameter('categoryCount') print "Number of patterns stored",classifier.getParameter('patternCount') return net
def trainNetwork(net): # Some stuff we will need later sensor = net.regions['sensor'] sp = net.regions["SP"] pysp = sp.getSelf() classifier = net.regions['classifier'] dutyCycles = numpy.zeros(DEFAULT_SP_PARAMS['columnCount'], dtype=GetNTAReal()) print "============= Loading training images =================" t1 = time.time() sensor.executeCommand(["loadMultipleImages", "mnist/training"]) numTrainingImages = sensor.getParameter('numImages') start = time.time() print "Load time for training images:",start-t1 print "Number of training images",numTrainingImages # First train just the SP print "============= SP training =================" classifier.setParameter('inferenceMode', 0) classifier.setParameter('learningMode', 0) sp.setParameter('learningMode', 0) sp.setParameter('inferenceMode', 1) nTrainingIterations = numTrainingImages for i in range(nTrainingIterations): net.run(1) dutyCycles += pysp._spatialPoolerOutput if i%(nTrainingIterations/100)== 0: print "Iteration",i,"Category:",sensor.getOutputData('categoryOut') # Now train just the classifier sequentially on all training images print "============= Classifier training =================" sensor.setParameter('explorer','Flash') classifier.setParameter('inferenceMode', 0) classifier.setParameter('learningMode', 1) sp.setParameter('learningMode', 0) sp.setParameter('inferenceMode', 1) for i in range(numTrainingImages): net.run(1) if i%(numTrainingImages/100)== 0: print "Iteration",i,"Category:",sensor.getOutputData('categoryOut') # Save the trained network net.save("mnist_net.nta") # Print various statistics print "============= Training statistics =================" print "Training time:",time.time() - start tenPct= nTrainingIterations/10 print "My duty cycles:",fdrutilities.numpyStr(dutyCycles, format="%g") print "Number of nonzero duty cycles:",len(dutyCycles.nonzero()[0]) print "Mean/Max duty cycles:",dutyCycles.mean(), dutyCycles.max() print "Number of columns that won for > 10% patterns",\ (dutyCycles>tenPct).sum() print "Number of columns that won for > 20% patterns",\ (dutyCycles>2*tenPct).sum() print "Num categories learned",classifier.getParameter('categoryCount') print "Number of patterns stored",classifier.getParameter('patternCount') return net