GeNN  2.2.3
GPU enhanced Neuronal Networks (GeNN)
Schmuker2014_classifier.h
Go to the documentation of this file.
1 /*--------------------------------------------------------------------------
2  Author: Alan Diamond
3 --------------------------------------------------------------------------*/
4 
5 
6 #ifndef SCHMUKER2014_CLASSIFIER_H
7 #define SCHMUKER2014_CLASSIFIER_H
8 
9 #include <stdint.h>
10 
11 //--------------------------------------------------------------------------
19 //--------------------------------------------------------------------------
20 
21 
23 
24 //--------------------------------------------------------------------------
27 //--------------------------------------------------------------------------
28 
30 {
31  public:
32  double d_maxRandomNumber; //number used to scale correcly scale poission neuron firing probabilities
33 
35  uint64_t *inputRates; //dataset (2D array) of required poisson neuron firing rates that represent the input data to the network
36  unsigned int inputRatesSize; //cache the size of the input data, this is used at multiple times
37  float * vrData; //2D array of vectors in feature space that will act as the virtual receptor (VR) points
38  unsigned int *classLabel; //array holding set of classes labelling the recordings, indexed by recordingIdx
39  unsigned int *individualSpikeCountPN; //stores total of spikes on every PN neuron during the run time. Needed for the plasticity rule.
40  unsigned int *overallWinnerSpikeCountAN;
41  unsigned int *clusterSpikeCountAN; //stores total of the spikes witihn each AN cluster during each plasticity window. Needed to determine the winning output cluster class during that window,
42  float * plasticWeights; //2D array copy of PN AN weights which is updated by plasticity during a presentation
43 
44 
45  //------------------------------------------------------------------------
46  // on the device:
47  uint64_t *d_inputRates; //copy of inputRates that will be passed en block to device, which will use a specified offset to select the particular vector of rates
48 
49  //------------------------------------------------------------------------
50  //convenience holders for getting population sizes
51  unsigned int countRN, countPN, countAN, countPNAN;
52  static const unsigned int timestepsPerRecording = RECORDING_TIME_MS / DT ; // = num timesteps contained in each data recording;
53 
54  //cached max and min values generated from data set used for scaling VR responses
55  float * sampleDistance; //array of 2 floats 0 = max, 1 = min
56 
57  //holders for the directories used to locate recordings, cached data and output files
59 
60  UINT correctClass; //holds the id for the class labelled to the current recording
61  int winningClass; //stores the id of the class that "won" the classification during the last input presentation (invocation of run() method). Set by calculateOverallWinner method
62 
64 
65  FILE * log; //opened general logging file
66 
67  //Adjustable parameters (defaulted from #define constants)
83 
85 
86  // end of data fields
87 
91  void populateDeviceMemory();
93  void clearDownDevice();
94  void run(float runtime, string filename_rasterPlot,bool usePlasticity);
95  void getSpikesFromGPU();
97  void outputSpikes(FILE *, string delim);
98 
103 
104  void createWTAConnectivity(float * synapse, UINT populationSize, UINT clusterSize, float synapseWeight, float probability);
105 
106  bool randomEventOccurred(float probability);
107 
109 
110  void generate_or_load_inputrates_dataset(unsigned int recordingIdx);
111  void generate_inputrates_dataset(unsigned int recordingIdx);
112  FILE * openRecordingFile(UINT recordingIndex);
113 
114  void applyLearningRuleSynapses(float * synapsesPNAN);
115 
116 
117  void initialiseInputData();
118  void load_VR_data();
119  void setCorrectClass(UINT recordingIdx);
120  UINT getClassCluster(UINT anIdx);
121  void loadClassLabels();
122 
123  void addInputRate(float * samplePoint,UINT timeStep);
124  uint64_t convertToRateCode(float inputRateHz) ;
125  float calculateVrResponse(float * samplePoint, float * vrPoint);
126 
128  void findMaxMinSampleDistances(float * samples, UINT startAt,UINT totalSamples);
129  float getSampleDistance(UINT max0_min1);
130  float getManhattanDistance(float * pointA,float * pointB, UINT numElements);
131 
132  float getRand0to1();
134  UINT calculateWinner(unsigned int * clusterSpikeCount);
136 
140  void resetClusterSpikeCountAN() ;
141  void resetOverallWinner();
142  void updateWeights_PN_AN();
143 
144  UINT getClusterIndex(UINT neuronIndex, UINT clusterSize);
145 
147 
148  string getRecordingFilename(UINT recordingIdx) ;
149 
150  //Common utility fns. Move to a utilities file/class
151  bool loadArrayFromTextFile(string path, void * array, string delim, UINT arrayLen, data_type dataType);
152  void checkContents(string title, void * array, UINT howMany, UINT displayPerLine, data_type dataType, UINT decimalPoints);
153  void checkContents(string title, void * array, UINT howMany, UINT displayPerLine, data_type dataType, UINT decimalPoints, string delim);
154  void printSeparator();
155 
156  void resetDevice();
157 
158  void startLog() ;
159 
160 };
161 
162 #endif
string getRecordingFilename(UINT recordingIdx)
Definition: Schmuker2014_classifier.cc:401
void outputSpikes(FILE *, string delim)
Definition: Schmuker2014_classifier.cc:704
float getManhattanDistance(float *pointA, float *pointB, UINT numElements)
Definition: Schmuker2014_classifier.cc:593
UINT param_MAX_FIRING_RATE_HZ
Definition: Schmuker2014_classifier.h:69
void resetClusterSpikeCountAN()
Definition: Schmuker2014_classifier.cc:1051
string uniqueRunId
Definition: Schmuker2014_classifier.h:58
string outputDir
Definition: Schmuker2014_classifier.h:58
void generateSimulatedTimeSeriesData()
Definition: Schmuker2014_classifier.cc:368
void updateClusterSpikeCountAN()
Definition: Schmuker2014_classifier.cc:1038
UINT correctClass
Definition: Schmuker2014_classifier.h:60
void initialiseWeights_WTA_AN_AN()
Definition: Schmuker2014_classifier.cc:820
Definition: modelSpec.h:85
void updateIndividualSpikeCountPN()
Definition: Schmuker2014_classifier.cc:1011
float param_CONNECTIVITY_PN_PN
Definition: Schmuker2014_classifier.h:76
void generate_inputrates_dataset(unsigned int recordingIdx)
Definition: Schmuker2014_classifier.cc:409
unsigned int countPN
Definition: Schmuker2014_classifier.h:51
void findMaxMinSampleDistances(float *samples, UINT startAt, UINT totalSamples)
Definition: Schmuker2014_classifier.cc:564
#define RECORDING_TIME_MS
Definition: experiment.h:35
float * plasticWeights
Definition: Schmuker2014_classifier.h:42
void updateWeights_PN_AN_on_device()
Definition: Schmuker2014_classifier.cc:742
UINT param_SPIKING_ACTIVITY_THRESHOLD_HZ
Definition: Schmuker2014_classifier.h:68
float * sampleDistance
Definition: Schmuker2014_classifier.h:55
string datasetName
Definition: Schmuker2014_classifier.h:58
void run(float runtime, string filename_rasterPlot, bool usePlasticity)
Definition: Schmuker2014_classifier.cc:613
void update_input_data_on_device()
Definition: Schmuker2014_classifier.cc:152
void loadClassLabels()
Definition: Schmuker2014_classifier.cc:319
unsigned int inputRatesSize
Definition: Schmuker2014_classifier.h:36
string recordingsDir
Definition: Schmuker2014_classifier.h:58
unsigned int * overallWinnerSpikeCountAN
Definition: Schmuker2014_classifier.h:40
void load_VR_data()
Definition: Schmuker2014_classifier.cc:191
float param_WEIGHT_WTA_PN_PN
Definition: Schmuker2014_classifier.h:74
void initialiseWeights_WTA_PN_PN()
Definition: Schmuker2014_classifier.cc:787
float param_PLASTICITY_INTERVAL_MS
Definition: Schmuker2014_classifier.h:82
void resetOverallWinner()
Definition: Schmuker2014_classifier.cc:1067
Definition: Schmuker2014_classifier.h:63
FILE * log
Definition: Schmuker2014_classifier.h:65
float param_CONNECTIVITY_PN_AN
Definition: Schmuker2014_classifier.h:78
Definition: Schmuker2014_classifier.h:63
bool clearedDownDevice
Definition: Schmuker2014_classifier.h:84
UINT param_MIN_FIRING_RATE_HZ
Definition: Schmuker2014_classifier.h:70
FILE * openRecordingFile(UINT recordingIndex)
Definition: Schmuker2014_classifier.cc:429
float param_GLOBAL_WEIGHT_SCALING
Definition: Schmuker2014_classifier.h:71
void applyLearningRuleSynapses(float *synapsesPNAN)
Definition: Schmuker2014_classifier.cc:858
void setMaxMinSampleDistances()
Definition: Schmuker2014_classifier.cc:521
unsigned int * clusterSpikeCountAN
Definition: Schmuker2014_classifier.h:41
unsigned int UINT
Definition: experiment.h:18
float param_MAX_WEIGHT_PN_AN
Definition: Schmuker2014_classifier.h:80
double d_maxRandomNumber
Definition: Schmuker2014_classifier.h:32
string cacheDir
Definition: Schmuker2014_classifier.h:58
static const unsigned int timestepsPerRecording
Definition: Schmuker2014_classifier.h:52
float calculateVrResponse(float *samplePoint, float *vrPoint)
Definition: Schmuker2014_classifier.cc:473
float param_MIN_WEIGHT_PN_AN
Definition: Schmuker2014_classifier.h:79
NNmodel model
Definition: Schmuker2014_classifier.h:34
Definition: Schmuker2014_classifier.h:63
void initialiseInputData()
Definition: Schmuker2014_classifier.cc:828
#define DT
This defines the global time step at which the simulation will run.
Definition: HHVclampGA_project/model/MBody1.cc:21
bool randomEventOccurred(float probability)
Definition: Schmuker2014_classifier.cc:951
bool loadArrayFromTextFile(string path, void *array, string delim, UINT arrayLen, data_type dataType)
Definition: Schmuker2014_classifier.cc:213
float param_WEIGHT_DELTA_PN_AN
Definition: Schmuker2014_classifier.h:81
uint64_t convertToRateCode(float inputRateHz)
Definition: Schmuker2014_classifier.cc:166
void populateDeviceMemory()
Definition: Schmuker2014_classifier.cc:120
int winningClass
Definition: Schmuker2014_classifier.h:61
void resetDevice()
Definition: Schmuker2014_classifier.cc:95
unsigned int * individualSpikeCountPN
Definition: Schmuker2014_classifier.h:39
void clearDownDevice()
Definition: Schmuker2014_classifier.cc:138
unsigned int countAN
Definition: Schmuker2014_classifier.h:51
void initialiseWeights_DENSE_PN_AN()
Definition: Schmuker2014_classifier.cc:796
UINT calculateCurrentWindowWinner()
Definition: Schmuker2014_classifier.cc:1001
unsigned int * classLabel
Definition: Schmuker2014_classifier.h:38
void setCorrectClass(UINT recordingIdx)
Definition: Schmuker2014_classifier.cc:850
Schmuker2014_classifier()
Definition: Schmuker2014_classifier.cc:37
float param_CONNECTIVITY_RN_PN
Definition: Schmuker2014_classifier.h:73
float param_WEIGHT_WTA_AN_AN
Definition: Schmuker2014_classifier.h:75
UINT calculateOverallWinner()
Definition: Schmuker2014_classifier.cc:992
UINT calculateWinner(unsigned int *clusterSpikeCount)
Definition: Schmuker2014_classifier.cc:974
float param_WEIGHT_RN_PN
Definition: Schmuker2014_classifier.h:72
void resetIndividualSpikeCountPN()
Definition: Schmuker2014_classifier.cc:1022
uint64_t * inputRates
Definition: Schmuker2014_classifier.h:35
void addInputRate(float *samplePoint, UINT timeStep)
Definition: Schmuker2014_classifier.cc:445
data_type
Definition: Schmuker2014_classifier.h:63
void generate_or_load_inputrates_dataset(unsigned int recordingIdx)
Definition: Schmuker2014_classifier.cc:342
unsigned int countRN
Definition: Schmuker2014_classifier.h:51
void checkContents(string title, void *array, UINT howMany, UINT displayPerLine, data_type dataType, UINT decimalPoints)
Definition: Schmuker2014_classifier.cc:277
void startLog()
Definition: Schmuker2014_classifier.cc:85
void initialiseWeights_SPARSE_RN_PN()
Definition: Schmuker2014_classifier.cc:758
void createWTAConnectivity(float *synapse, UINT populationSize, UINT clusterSize, float synapseWeight, float probability)
Definition: Schmuker2014_classifier.cc:932
This class cpontains the methods for running the Schmuker_2014_classifier example model...
Definition: Schmuker2014_classifier.h:29
float getSampleDistance(UINT max0_min1)
Definition: Schmuker2014_classifier.cc:489
UINT getClassCluster(UINT anIdx)
Definition: Schmuker2014_classifier.cc:915
uint64_t * d_inputRates
Definition: Schmuker2014_classifier.h:47
~Schmuker2014_classifier()
Definition: Schmuker2014_classifier.cc:61
void getSpikesFromGPU()
Definition: Schmuker2014_classifier.cc:690
float * vrData
Definition: Schmuker2014_classifier.h:37
void updateWeights_PN_AN()
Definition: Schmuker2014_classifier.cc:729
Definition: Schmuker2014_classifier.h:63
void allocateHostAndDeviceMemory()
Definition: Schmuker2014_classifier.cc:105
UINT getClusterIndex(UINT neuronIndex, UINT clusterSize)
Definition: Schmuker2014_classifier.cc:923
unsigned int countPNAN
Definition: Schmuker2014_classifier.h:51
void printSeparator()
Definition: Schmuker2014_classifier.cc:268
float getRand0to1()
Definition: Schmuker2014_classifier.cc:966
float param_CONNECTIVITY_AN_AN
Definition: Schmuker2014_classifier.h:77