def recordSpecifiedPopulations(settings,populationsInput,populationsNoiseSource,populationsRN,populationsPN,populationsAN): recordPopnInput = settings['RECORD_POP_INPUT_LEARNING'] recordPopnNoise = settings['RECORD_POP_NOISE_SOURCE_LEARNING'] recordPopnRN = settings['RECORD_POP_RN_LEARNING'] recordPopnPN = settings['RECORD_POP_PN_LEARNING'] recordPopnAN = settings['RECORD_POP_AN_LEARNING'] if not settings['LEARNING']: recordPopnInput = settings['RECORD_POP_INPUT_TESTING'] recordPopnNoise = settings['RECORD_POP_NOISE_SOURCE_TESTING'] recordPopnRN = settings['RECORD_POP_RN_TESTING'] recordPopnPN = settings['RECORD_POP_PN_TESTING'] recordPopnAN = settings['RECORD_POP_AN_TESTING'] utils.recordPopulations(populationsInput,recordPopnInput) utils.recordPopulations(populationsNoiseSource,recordPopnNoise) utils.recordPopulations(populationsRN,recordPopnRN) utils.recordPopulations(populationsPN,recordPopnPN) utils.recordPopulations(populationsAN,recordPopnAN) return (recordPopnInput,recordPopnNoise,recordPopnRN,recordPopnPN,recordPopnAN)
def runClassifier(params, settings, fold): classifier.printParameters('Model Parameters',params) classifier.printParameters('Classifier Settings',settings) populationsInput = list() populationsNoiseSource = list() populationsRN = list() populationsPN = list() populationsAN = list() projectionsPNAN = list() #keep handle to these for saving learnt weights if settings['LEARNING']: totalSimulationTime = float(settings['OBSERVATION_EXPOSURE_TIME_MS'] * settings['NUM_OBSERVATIONS']) else: totalSimulationTime = float(settings['OBSERVATION_EXPOSURE_TIME_MS'] * settings['NUM_OBSERVATIONS_TEST']) print 'Total Simulation Time will be', totalSimulationTime DT = 1.0 #ms Integration timestep for simulation classifier.setupModel(params, settings, DT, totalSimulationTime, populationsInput, populationsNoiseSource, populationsRN,populationsPN,populationsAN,projectionsPNAN) utils.recordPopulations(populationsInput,settings['RECORD_POP_INPUT']) utils.recordPopulations(populationsNoiseSource,settings['RECORD_POP_NOISE_SOURCE']) utils.recordPopulations(populationsRN,settings['RECORD_POP_RN']) utils.recordPopulations(populationsPN,settings['RECORD_POP_PN']) utils.recordPopulations(populationsAN,settings['RECORD_POP_AN']) #run the model for the whole learning or the whole testing period classifier.run(totalSimulationTime) fig1 = plt.figure(figsize=(20,20)) plt.xlabel('Time[ms]', fontsize = 16) plt.ylabel('Neurons', fontsize = 16) title = 'Testing' if settings['LEARNING']: title = 'Training' title = title + ' - Odour Classification - ' + str(params['NUM_VR']) + \ ' Virtual Receptors' fig1.suptitle(title, fontsize = 18) indexOffset = 0 indexOffset = 1 + utils.plotAllSpikes(populationsInput, totalSimulationTime, indexOffset, settings['RECORD_POP_INPUT']) indexOffset = 1 + utils.plotAllSpikes(populationsNoiseSource, totalSimulationTime, indexOffset, settings['RECORD_POP_NOISE_SOURCE']) indexOffset = 1 + utils.plotAllSpikes(populationsRN, totalSimulationTime, indexOffset,settings['RECORD_POP_RN']) indexOffset = 1 + utils.plotAllSpikes(populationsPN, totalSimulationTime, indexOffset,settings['RECORD_POP_PN']) indexOffset = 1 + utils.plotAllSpikes(populationsAN, totalSimulationTime, indexOffset,settings['RECORD_POP_AN']) filename = 'RasterPlot-Testing-fold' + str(fold)+'.pdf' if settings['LEARNING']: filename = 'RasterPlot-Training-fold' + str(fold)+'.pdf' plt.savefig(filename) plt.close() (fig2, (ax1, ax2, ax3)) = plt.subplots(3, 1, figsize=(20,20), sharex=True) plt.axes(ax1) utils.plotAllSpikes(populationsRN,totalSimulationTime,0, settings['RECORD_POP_RN']) plt.axes(ax2) utils.plotAllSpikes(populationsPN,totalSimulationTime,0, settings['RECORD_POP_PN']) plt.axes(ax3) utils.plotAllSpikes(populationsAN,totalSimulationTime,0, settings['RECORD_POP_AN']) ax1.set_title('RN layer spikes', fontsize = 30) ax2.set_title('PN layer spikes', fontsize = 30) ax3.set_title('AN layer spikes', fontsize = 30) ax3.set_xlabel('Simulation time[ms]', fontsize = 30) ax3.set_ylabel('Neuron indices', fontsize = 30) ax3.tick_params(labelsize=20) ax2.tick_params(labelsize=20) ax1.tick_params(labelsize=20) filename = 'Separated_RasterPlot-Testing-fold' + str(fold)+'.pdf' if settings['LEARNING']: filename = 'Separated_RasterPlot-Training-fold' + str(fold)+'.pdf' plt.savefig(filename) plt.close() # fig.add_subplot(2,1,2) # utils.plotAllSpikes(populationsAN,totalSimulationTime, 0, settings['RECORD_POP_AN']) #if in the learning stage if settings['LEARNING']: #store the weight values learnt via plasticity, these will be reloaded as #static weights for test stage classLabels = utils.loadListFromCsvFile(settings['CLASS_LABELS_TRAIN'],True) classifier.saveLearntWeightsPNAN(settings, params, projectionsPNAN, len(populationsPN),len(populationsAN)) winningClassesByObservation, winningSpikeCounts = classifier.calculateWinnersAN(settings,populationsAN, classLabels) scorePercent = classifier.calculateScore(winningClassesByObservation,classLabels) else: #save the AN layer spike data from the testing run. #This data will be interrogated to find the winning class (most active AN pop) #during the presentation of each test observation #classifier.saveSpikesAN(settings,populationsAN) classLabels = utils.loadListFromCsvFile(settings['CLASS_LABELS_TEST'],True) winningClassesByObservation, winningSpikeCounts = classifier.calculateWinnersAN(settings,populationsAN, classLabels) scorePercent = classifier.calculateScore(winningClassesByObservation, classLabels) utils.saveListAsCsvFile(winningClassesByObservation,settings['CLASSIFICATION_RESULTS_PATH']) utils.saveListAsCsvFile(winningSpikeCounts,settings['SPIKE_COUNT_RESULTS_PATH']) classifier.end() #write a marker file to allow invoking programs to know that the Python/Pynn run completed utils.saveListToFile(['Pynn Run complete'],settings['RUN_COMPLETE_FILE']) print 'PyNN run completed.' return scorePercent
def runClassifier(params, settings, fold): classifier.printParameters('Model Parameters', params) classifier.printParameters('Classifier Settings', settings) populationsInput = list() populationsNoiseSource = list() populationsRN = list() populationsPN = list() populationsAN = list() projectionsPNAN = list() #keep handle to these for saving learnt weights if settings['LEARNING']: totalSimulationTime = float(settings['OBSERVATION_EXPOSURE_TIME_MS'] * settings['NUM_OBSERVATIONS']) else: totalSimulationTime = float(settings['OBSERVATION_EXPOSURE_TIME_MS'] * settings['NUM_OBSERVATIONS_TEST']) print 'Total Simulation Time will be', totalSimulationTime DT = 1.0 #ms Integration timestep for simulation classifier.setupModel(params, settings, DT, totalSimulationTime, populationsInput, populationsNoiseSource, populationsRN, populationsPN, populationsAN, projectionsPNAN) utils.recordPopulations(populationsInput, settings['RECORD_POP_INPUT']) utils.recordPopulations(populationsNoiseSource, settings['RECORD_POP_NOISE_SOURCE']) utils.recordPopulations(populationsRN, settings['RECORD_POP_RN']) utils.recordPopulations(populationsPN, settings['RECORD_POP_PN']) utils.recordPopulations(populationsAN, settings['RECORD_POP_AN']) #run the model for the whole learning or the whole testing period classifier.run(totalSimulationTime) fig1 = plt.figure(figsize=(20, 20)) plt.xlabel('Time[ms]', fontsize=16) plt.ylabel('Neurons', fontsize=16) title = 'Testing' if settings['LEARNING']: title = 'Training' title = title + ' - Odour Classification - ' + str(params['NUM_VR']) + \ ' Virtual Receptors' fig1.suptitle(title, fontsize=18) indexOffset = 0 indexOffset = 1 + utils.plotAllSpikes(populationsInput, totalSimulationTime, indexOffset, settings['RECORD_POP_INPUT']) indexOffset = 1 + utils.plotAllSpikes(populationsNoiseSource, totalSimulationTime, indexOffset, settings['RECORD_POP_NOISE_SOURCE']) indexOffset = 1 + utils.plotAllSpikes(populationsRN, totalSimulationTime, indexOffset, settings['RECORD_POP_RN']) indexOffset = 1 + utils.plotAllSpikes(populationsPN, totalSimulationTime, indexOffset, settings['RECORD_POP_PN']) indexOffset = 1 + utils.plotAllSpikes(populationsAN, totalSimulationTime, indexOffset, settings['RECORD_POP_AN']) filename = 'RasterPlot-Testing-fold' + str(fold) + '.pdf' if settings['LEARNING']: filename = 'RasterPlot-Training-fold' + str(fold) + '.pdf' plt.savefig(filename) plt.close() (fig2, (ax1, ax2, ax3)) = plt.subplots(3, 1, figsize=(20, 20), sharex=True) plt.axes(ax1) utils.plotAllSpikes(populationsRN, totalSimulationTime, 0, settings['RECORD_POP_RN']) plt.axes(ax2) utils.plotAllSpikes(populationsPN, totalSimulationTime, 0, settings['RECORD_POP_PN']) plt.axes(ax3) utils.plotAllSpikes(populationsAN, totalSimulationTime, 0, settings['RECORD_POP_AN']) ax1.set_title('RN layer spikes', fontsize=30) ax2.set_title('PN layer spikes', fontsize=30) ax3.set_title('AN layer spikes', fontsize=30) ax3.set_xlabel('Simulation time[ms]', fontsize=30) ax3.set_ylabel('Neuron indices', fontsize=30) ax3.tick_params(labelsize=20) ax2.tick_params(labelsize=20) ax1.tick_params(labelsize=20) filename = 'Separated_RasterPlot-Testing-fold' + str(fold) + '.pdf' if settings['LEARNING']: filename = 'Separated_RasterPlot-Training-fold' + str(fold) + '.pdf' plt.savefig(filename) plt.close() # fig.add_subplot(2,1,2) # utils.plotAllSpikes(populationsAN,totalSimulationTime, 0, settings['RECORD_POP_AN']) #if in the learning stage if settings['LEARNING']: #store the weight values learnt via plasticity, these will be reloaded as #static weights for test stage classLabels = utils.loadListFromCsvFile(settings['CLASS_LABELS_TRAIN'], True) classifier.saveLearntWeightsPNAN(settings, params, projectionsPNAN, len(populationsPN), len(populationsAN)) winningClassesByObservation, winningSpikeCounts = classifier.calculateWinnersAN( settings, populationsAN, classLabels) scorePercent = classifier.calculateScore(winningClassesByObservation, classLabels) else: #save the AN layer spike data from the testing run. #This data will be interrogated to find the winning class (most active AN pop) #during the presentation of each test observation #classifier.saveSpikesAN(settings,populationsAN) classLabels = utils.loadListFromCsvFile(settings['CLASS_LABELS_TEST'], True) winningClassesByObservation, winningSpikeCounts = classifier.calculateWinnersAN( settings, populationsAN, classLabels) scorePercent = classifier.calculateScore(winningClassesByObservation, classLabels) utils.saveListAsCsvFile(winningClassesByObservation, settings['CLASSIFICATION_RESULTS_PATH']) utils.saveListAsCsvFile(winningSpikeCounts, settings['SPIKE_COUNT_RESULTS_PATH']) classifier.end() #write a marker file to allow invoking programs to know that the Python/Pynn run completed utils.saveListToFile(['Pynn Run complete'], settings['RUN_COMPLETE_FILE']) print 'PyNN run completed.' return scorePercent
populationsInput = list() populationsNoiseSource = list() populationsRN = list() populationsPN = list() populationsAN = list() projectionsPNAN = list() #keep handle to these for saving learnt weights totalSimulationTime = settings['OBSERVATION_EXPOSURE_TIME_MS'] * settings['NUM_OBSERVATIONS'] print 'Total Simulation Time will be', totalSimulationTime DT = 1.0 #ms Integration timestep for simulation classifier.setupModel(settings, params, DT,totalSimulationTime, populationsInput, populationsNoiseSource, populationsRN,populationsPN,populationsAN,projectionsPNAN) utils.recordPopulations(populationsInput,settings['RECORD_POP_INPUT']) utils.recordPopulations(populationsNoiseSource,settings['RECORD_POP_NOISE_SOURCE']) utils.recordPopulations(populationsRN,settings['RECORD_POP_RN']) utils.recordPopulations(populationsPN,settings['RECORD_POP_PN']) utils.recordPopulations(populationsAN,settings['RECORD_POP_AN']) #run the model for the whole learning or the whole testing period classifier.run(totalSimulationTime) if settings['DISPLAY_RASTER_PLOT'] or settings['SAVE_RASTER_PLOT_AS_PNG']: plt.figure() plt.xlabel('Time/ms') plt.ylabel('Neurons') title = 'Testing' if settings['LEARNING']: title = 'Training'