Пример #1
0
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  
Пример #3
0
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'