def plotSingleTuningCurve(dataPath, gaussianDistance, ax1=None): b.rcParams['font.size'] = 20 averagingWindowSize = 1 nE = 1600 ymax = 1 if ax1==None: b.figure(figsize=(8,6.5)) fig_axis = b.subplot(1,1,1) else: fig_axis = ax1 b.sca(ax1) path = dataPath + '/dist'+str(gaussianDistance)+'/' +'activity/' spikeCount = np.load(path + 'spikeCountPerExample.npy') spikeCountSingleNeuron = (spikeCount[:,nE/2-2,0]) numMeasurements = len(spikeCount[:,0,0]) spikeCount = movingaverage(spikeCountSingleNeuron,averagingWindowSize) spikeCount /= np.max(spikeCountSingleNeuron) b.plot(spikeCount, color='deepskyblue', marker='o', alpha=0.6, linewidth=0, label='Output')#alpha=0.5+(0.5*float(i)/float(len(lower_peaks))), fig_axis.set_xticks([0., numMeasurements/2, numMeasurements]) fig_axis.set_xticklabels(['0', '0.5', '1']) fig_axis.set_yticks([0., ymax/2, ymax]) fig_axis.spines['top'].set_visible(False) fig_axis.spines['right'].set_visible(False) fig_axis.get_xaxis().tick_bottom() fig_axis.get_yaxis().tick_left() b.ylabel('Normalized response') b.ylim(0,ymax+0.05) # b.title('spikes:' + str(sum(spikeCount)) + ', pop. value: ' + str(computePopVector(spikeCount))) if ax1==None: b.legend(loc='upper left', fancybox=True, framealpha=0.0) b.savefig(dataPath + '/tuningCurveSingleNeuron.png', dpi=300, bbox_inches='tight')
def plotActivity(dataPath, gaussianDistances, ax1=None): averagingWindowSize = 32 if ax1==None: b.figure() else: b.sca(ax1) linewidth = 2 for i,dist in enumerate(gaussianDistances[:]): path = dataPath + '/dist'+str(dist)+'/' +'activity/' spikeCountTemp = np.load(path + 'spikeCountPerExample.npy') spikeCount = spikeCountTemp[25,:,0]#np.loadtxt(path + 'spikeCountAe.txt') # spikeCount = np.roll(spikeCount, 400) inputSpikeCount = np.loadtxt(path + 'spikeCountXe.txt') spikeCount = movingaverage(spikeCount,averagingWindowSize) inputSpikeCount = movingaverage(inputSpikeCount,averagingWindowSize) if i==len(gaussianDistances)-1: b.plot(spikeCount, 'b', alpha=0.6, linewidth=linewidth, label='Max. dist output')#alpha=0.5+(0.5*float(i)/float(len(lower_peaks))), b.plot(inputSpikeCount, 'r', alpha=1., linewidth=linewidth, label='Max. dist. input') elif i==0: b.plot(spikeCount, 'k--', alpha=0.6, linewidth=linewidth, label='Min. dist output') b.plot(inputSpikeCount, 'r--', alpha=1., linewidth=linewidth, label='Min. dist. input') else: b.plot(spikeCount, 'k', alpha=0.2+(0.4*float(i)/float(len(gaussianDistances))), linewidth=0.6) b.plot(inputSpikeCount, 'r', alpha=0.2+(0.4*float(i)/float(len(gaussianDistances))), linewidth=0.6) b.ylim(0,35) # b.title('spikes:' + str(sum(spikeCount)) + ', pop. value: ' + str(computePopVector(spikeCount))) if ax1==None: b.legend(loc='upper left', fancybox=True, framealpha=0.0) b.savefig(dataPath + '/multipleAnglesActivity.png', dpi=300)
def plotHeatmap(dataPath, gaussianDistances, ax1=None): b.rcParams['font.size'] = 20 if ax1==None: b.figure(figsize=(8,15)) else: b.sca(ax1) nE = 1600 averagingWindowSize = 32 spikeCount = np.zeros((len(gaussianDistances), nE)) for i,dist in enumerate(gaussianDistances[:]): path = dataPath + '/dist'+str(dist)+'/' +'activity/' spikeCountTemp = np.load(path + 'spikeCountPerExample.npy') spikeCount[i,:] = spikeCountTemp[25,:,0]#np.loadtxt(path + 'spikeCountAe.txt') # spikeCount[i,:] = np.roll(spikeCount[i,:], int(0.25*len(spikeCount[i,:]))) spikeCount[i,:] = movingaverage(spikeCount[i,:], averagingWindowSize) spikeCount[i,:] /= np.max(spikeCount[i,:]) b.imshow(spikeCount[:,:], aspect='auto', extent=[0,1,2,0]) b.colorbar() b.xlabel('Neuron number (resorted)') b.xlabel('Neuron number (resorted)') if ax1==None: b.savefig(dataPath + '/multipleAnglesHeatmap.png', dpi=300, bbox_inches='tight')
def plotActivity(dataPath, lower_peaks, ax1=None): averagingWindowSize = 32 if ax1==None: b.figure() else: b.sca(ax1) for i,gaussian_peak_low in enumerate(lower_peaks[:]): path = dataPath + '/peak_'+str(gaussian_peak_low)+'/' +'activity/' spikeCount = np.loadtxt(path + 'spikeCountAe.txt') inputSpikeCount = np.loadtxt(path + 'spikeCountXe.txt') spikeCount = movingaverage(spikeCount,averagingWindowSize) inputSpikeCount = movingaverage(inputSpikeCount,averagingWindowSize) if i==len(lower_peaks)-1: b.plot(spikeCount, 'k', alpha=1., linewidth=3, label='Output')#alpha=0.5+(0.5*float(i)/float(len(lower_peaks))), b.plot(inputSpikeCount, 'r', alpha=1., linewidth=3, label='Input') elif i==0: b.plot(spikeCount, 'k', alpha=0.6, linewidth=3)# b.plot(inputSpikeCount, 'r', alpha=0.6, linewidth=3) else: b.plot(spikeCount, 'k', alpha=0.2+(0.4*float(i)/float(len(lower_peaks))), linewidth=0.6) b.plot(inputSpikeCount, 'r', alpha=0.2+(0.4*float(i)/float(len(lower_peaks))), linewidth=0.6) b.legend() b.ylim(0,35) # b.title('spikes:' + str(sum(spikeCount)) + ', pop. value: ' + str(computePopVector(spikeCount))) if ax1==None: b.savefig(dataPath + 'CueIntegration.png', dpi=900)
def plotActivity(dataPath, inputStrengths, ax1=None): averagingWindowSize = 1 nE = 1600 ymax = 30 # b.rcParams['lines.color'] = 'w' # b.rcParams['text.color'] = 'w' # b.rcParams['xtick.color'] = 'w' # b.rcParams['ytick.color'] = 'w' # b.rcParams['axes.labelcolor'] = 'w' # b.rcParams['axes.edgecolor'] = 'w' b.rcParams['font.size'] = 20 if ax1==None: b.figure(figsize=(8,6.5)) fig_axis = b.subplot(1,1,1) else: fig_axis = ax1 b.sca(ax1) for i,inputStrength in enumerate(inputStrengths[:]): path = dataPath + '/peak_'+str(inputStrength)+'/' +'activity/' spikeCount = np.loadtxt(path + 'spikeCountAe.txt') inputSpikeCount = np.loadtxt(path + 'spikeCountXe.txt') spikeCount = movingaverage(spikeCount,averagingWindowSize) inputSpikeCount = movingaverage(inputSpikeCount,averagingWindowSize) if i==len(inputStrengths)-1: b.plot(inputSpikeCount, 'r', alpha=1., linewidth=3, label='Input') b.plot(spikeCount, 'deepskyblue', alpha=0.6, linewidth=3, label='Output')#alpha=0.5+(0.5*float(i)/float(len(numPeaks))), # elif i==0: # b.plot(spikeCount, 'k--', alpha=1., linewidth=3)# # b.plot(inputSpikeCount, 'r--', alpha=1., linewidth=3) else: b.plot(spikeCount, 'k', alpha=0.2+(0.4*float(i)/float(len(inputStrength))), linewidth=0.6) b.plot(inputSpikeCount, 'r', alpha=0.2+(0.4*float(i)/float(len(inputStrength))), linewidth=0.6) fig_axis.set_xticks([0., nE/2, nE]) fig_axis.set_xticklabels(['0', '0.5', '1']) fig_axis.set_yticks([0., ymax/2, ymax]) fig_axis.spines['top'].set_visible(False) fig_axis.spines['right'].set_visible(False) fig_axis.get_xaxis().tick_bottom() fig_axis.get_yaxis().tick_left() b.ylabel('Firing Rate [Hz]') b.ylim(0,ymax) # b.title('spikes:' + str(sum(spikeCount)) + ', pop. value: ' + str(computePopVector(spikeCount))) if ax1==None: b.xlabel('Neuron number (resorted)') b.legend(fancybox=True, framealpha=0.0, loc='upper left') b.savefig(dataPath + 'CueIntegration_single.png', dpi=900, transparent=True)
def plotPopulationTuningCurve(dataPath, gaussianDistance, ax1=None): b.rcParams['font.size'] = 20 averagingWindowSize = 1 nE = 1600 ymax = 1 if ax1==None: b.figure(figsize=(8,6.5)) fig_axis = b.subplot(1,1,1) else: fig_axis = ax1 b.sca(ax1) path = dataPath + '/dist'+str(gaussianDistance)+'/' +'activity/' spikeCount = np.load(path + 'spikeCountPerExample.npy') numMeasurements = len(spikeCount[:,0,0]) measurementSpace = np.arange(numMeasurements) populationSpikeCount = np.zeros((numMeasurements)) for i in xrange(nE): populationSpikeCount += np.roll(spikeCount[:,i,0], int(-1.*i/nE*numMeasurements+ numMeasurements/2)) populationSpikeCount = movingaverage(populationSpikeCount,averagingWindowSize) populationSpikeCount /= np.max(populationSpikeCount) if gaussianDistance==0.: mean = sum(measurementSpace*populationSpikeCount)/numMeasurements #note this correction sigma = sum(populationSpikeCount*(measurementSpace-mean)**2)/numMeasurements #note this correction popt, _ = curve_fit(gaus,measurementSpace,populationSpikeCount,p0=[1,mean,sigma]) print 'Gaussian amplitude: ', popt[0], ', mean: ', popt[1], ', std.: ', popt[2]**2 b.plot(measurementSpace,gaus(measurementSpace,*popt),'k') b.plot(populationSpikeCount, color='deepskyblue', marker='o', alpha=0.6, linewidth=0, label='Output')#alpha=0.5+(0.5*float(i)/float(len(lower_peaks))), fig_axis.set_xticks([0., numMeasurements/2, numMeasurements]) fig_axis.set_xticklabels(['0', '0.5', '1']) fig_axis.set_yticks([0., ymax/2, ymax]) fig_axis.spines['top'].set_visible(False) fig_axis.spines['right'].set_visible(False) fig_axis.get_xaxis().tick_bottom() fig_axis.get_yaxis().tick_left() # b.ylabel('Normalized response') b.ylim(0,ymax+0.05) # b.title('spikes:' + str(sum(spikeCount)) + ', pop. value: ' + str(computePopVector(spikeCount))) if ax1==None: b.legend(loc='upper left', fancybox=True, framealpha=0.0) b.savefig(dataPath + '/tuningCurvePopulation' + str(gaussianDistance) + '.png', dpi=300, bbox_inches='tight')
def plotActivity(dataPath, ax1=None): averagingWindowSize = 1 nE = 1600 ymax = 40 # b.rcParams['lines.color'] = 'w' # b.rcParams['text.color'] = 'w' # b.rcParams['xtick.color'] = 'w' # b.rcParams['ytick.color'] = 'w' # b.rcParams['axes.labelcolor'] = 'w' # b.rcParams['axes.edgecolor'] = 'w' b.rcParams['font.size'] = 20 if ax1==None: fig = b.figure(figsize=(8,6.5)) fig_axis=b.subplot(1,1,1) else: fig_axis = ax1 b.sca(ax1) path = dataPath + 'activity/' spikeCount = np.loadtxt(path + 'spikeCountCe.txt') popVecs = np.loadtxt(path + 'popVecs1.txt') desiredResult = (popVecs[0] + popVecs[1])%1.*1600 resultMonitor = np.loadtxt(path + 'resultPopVecs1.txt') actualResult = resultMonitor[2]*1600 ax1.axvline(desiredResult, color='r', linewidth=3, ymax=ymax, label='Desired result') ax1.axvline(actualResult, color='blue', linewidth=3, ymax=ymax, label='Population vector') print 'desiredResult', desiredResult, ', actual result', actualResult # spikeCount = np.roll(spikeCount, 800+int(-1*desiredResult)) spikeCount = movingaverage(spikeCount,averagingWindowSize) b.plot(spikeCount, 'deepskyblue', alpha=0.6, linewidth=3, label='Population activity') fig_axis.set_xticks([0., nE/2, nE]) fig_axis.set_xticklabels(['0', '0.5', '1']) fig_axis.set_yticks([0., ymax/2, ymax]) fig_axis.spines['top'].set_visible(False) fig_axis.spines['right'].set_visible(False) fig_axis.get_xaxis().tick_bottom() fig_axis.get_yaxis().tick_left() b.ylabel('Firing Rate [Hz]') b.ylim(0,ymax) b.legend(fancybox=True, framealpha=0.0, loc='upper left') # b.title('spikes:' + str(sum(spikeCount)) + ', pop. value: ' + str(computePopVector(spikeCount))) if ax1==None: b.xlabel('Neuron number (resorted)') b.savefig(dataPath + 'SignalRestoration.png', dpi=900, transparent=True)
def plotSingleActivity(dataPath, gaussianDistance, ax1=None): b.rcParams['font.size'] = 20 averagingWindowSize = 30 nE = 1600 ymax = 1 if ax1==None: b.figure(figsize=(8,6.5)) fig_axis = b.subplot(1,1,1) else: fig_axis = ax1 b.sca(ax1) linewidth = 3 path = dataPath + '/dist'+str(gaussianDistance)+'/' +'activity/' spikeCountTemp = np.load(path + 'spikeCountPerExample.npy') spikeCount = spikeCountTemp[25,:,0]#np.loadtxt(path + 'spikeCountAe.txt') # spikeCount = np.roll(spikeCount, 400) inputSpikeCount = np.roll(np.loadtxt(path + 'spikeCountXe.txt'), 400) spikeCount = movingaverage(spikeCount,averagingWindowSize) spikeCount /= np.max(spikeCount) inputSpikeCount = movingaverage(inputSpikeCount,averagingWindowSize) inputSpikeCount /= np.max(inputSpikeCount) b.plot(spikeCount, 'deepskyblue', alpha=0.6, linewidth=linewidth, label='Output')#alpha=0.5+(0.5*float(i)/float(len(lower_peaks))), b.plot(inputSpikeCount, 'r', alpha=1., linewidth=linewidth, label='Input') fig_axis.set_xticks([0., nE/2, nE]) fig_axis.set_xticklabels(['0', '0.5', '1']) fig_axis.set_yticks([0., ymax/2, ymax]) fig_axis.spines['top'].set_visible(False) fig_axis.spines['right'].set_visible(False) fig_axis.get_xaxis().tick_bottom() fig_axis.get_yaxis().tick_left() b.ylabel('Normalized response') b.ylim(0,ymax) # b.title('spikes:' + str(sum(spikeCount)) + ', pop. value: ' + str(computePopVector(spikeCount))) if ax1==None: b.legend(loc='upper left', fancybox=True, framealpha=0.0) b.savefig(dataPath + '/multipleAnglesSingleActivity.png', dpi=300)
result_monitor) np.save(data_path + 'activity/inputNumbers' + str(num_examples), input_numbers) #------------------------------------------------------------------------------ # plot results #------------------------------------------------------------------------------ if rate_monitors: b.figure(fig_num) fig_num += 1 for i, name in enumerate(rate_monitors): b.subplot(len(rate_monitors), 1, i + 1) b.plot(rate_monitors[name].times / b.second, rate_monitors[name].rate, '.') b.title('Rates of population ' + name) b.savefig('../plots/rate_monitors_' + str(n_e) + '_' + stdp_input + '_input_exc_weights_norm.png') if spike_monitors: b.figure(fig_num) fig_num += 1 for i, name in enumerate(spike_monitors): b.subplot(len(spike_monitors), 1, i + 1) b.raster_plot(spike_monitors[name]) b.title('Spikes of population ' + name) b.savefig('../plots/spike_monitors_' + str(n_e) + '_' + stdp_input + '_input_exc_weights_norm.png') if spike_counters: b.figure(fig_num) fig_num += 1 for i, name in enumerate(spike_counters):
fi = b.figure(figsize = (5.0,4.6)) ax = plt.subplot(1,1,1) matplotlib.rcParams.update({'font.size': 22}) b.scatter(resultMonitor[start_time:end_time,1]*1600, resultMonitor[start_time:end_time,0]*1600, c='k', cmap=cmap.gray) #range(len(error)) # b.title('Error: ' + str(correctedErrorSum)) # b.xlabel('Desired activity') # b.ylabel('Population activity') ax.set_xticks([0,800,1600]) ax.set_xticklabels(['0', '800', '1600']) ax.set_yticks([0,800,1600]) ax.set_yticklabels(['0', '800', '1600'], va='center') b.xlim(xmin = 0, xmax = 1600) b.ylim(ymin = 0, ymax = 1600) b.savefig('evaluation' + ending, dpi = 300, transparent=True) b.figure() b.scatter(correctedDesDiff, correctedError[1:], c=resultMonitor[start_time+1:end_time,2], cmap=cmap.gray) b.title('Error: ' + str(correctedErrorSum)) b.xlabel('Difference from last desired activity') b.ylabel('Error') b.figure() b.scatter(correctedPopDiff, correctedError[1:], c=resultMonitor[start_time+1:end_time,2], cmap=cmap.gray) b.title('Error: ' + str(correctedErrorSum)) b.xlabel('Difference from last population activity') b.ylabel('Error')
def plotTuningHeatmap(dataPath, gaussianDistances, ax1=None): b.rcParams['font.size'] = 20 # averagingWindowSize = 1 nE = 1600 if ax1==None: b.figure(figsize=(8,15)) fig_axis = b.subplot(1,1,1) else: b.sca(ax1) fig_axis=ax1 path = dataPath + '/dist'+str(gaussianDistances[0])+'/' +'activity/' spikeCount = np.load(path + 'spikeCountPerExample.npy') numMeasurements = len(spikeCount[:,0,0]) measurementSpace = np.arange(numMeasurements) populationSpikeCount = np.zeros((numMeasurements, len(gaussianDistances))) for i,gaussianDistance in enumerate(gaussianDistances): # distanceAngle = gaussianDistance * 2 * 360 path = dataPath + '/dist'+str(gaussianDistance)+'/' +'activity/' spikeCount = np.load(path + 'spikeCountPerExample.npy') for j in xrange(nE): populationSpikeCount[:,i] += np.roll(spikeCount[:,j,0], int(-1.*j/nE*numMeasurements+ numMeasurements/2)) # j = 0 # populationSpikeCount[:,i] += np.roll(spikeCount[:,j,0], int(-1.*j/nE*numMeasurements+ numMeasurements/2)) # populationSpikeCount[:,i] = movingaverage(populationSpikeCount[:,i],averagingWindowSize) populationSpikeCount[:,i] /= np.max(populationSpikeCount[:,i]) if gaussianDistance==0.: mean = sum(measurementSpace*populationSpikeCount[:,i])/numMeasurements #note this correction sigma = sum(populationSpikeCount[:,i]*(measurementSpace-mean)**2)/numMeasurements #note this correction popt, _ = curve_fit(gaus,measurementSpace,populationSpikeCount[:,i],p0=[1,mean,sigma]) # tuningWidth = abs(popt[2])*2 tuningWidth = np.sum(populationSpikeCount>=0.5) tuningWidthAngle = tuningWidth/50.*360. print 'Gaussian amplitude:', popt[0], 'mean:', popt[1], 'std.:', popt[2], \ ', tuning width:', tuningWidth, ', tuning width angle:', tuningWidthAngle minX = max(0,round(numMeasurements/2-tuningWidth*2)) maxX = min(numMeasurements, round(numMeasurements/2+tuningWidth*2)) minY = round(0) maxY = round(tuningWidth/50.*len(gaussianDistances)*2*2) print minX, maxX, minY, maxY croppedCount = populationSpikeCount[minX:maxX,minY:maxY] fig_axis.imshow(croppedCount.transpose(), aspect='auto', extent=[minX, maxX, 2, 0]) # b.colorbar() fig_axis.set_xlabel('Distance from preferred stimulus, \ndivided by tuning width') fig_axis.set_xticks([numMeasurements/2-tuningWidth*2, numMeasurements/2-tuningWidth, numMeasurements/2, numMeasurements/2+tuningWidth, numMeasurements/2+tuningWidth*2]) fig_axis.set_xticklabels(['-2', '-1', '0', '1', '2']) fig_axis.set_yticks([0., 0.5, 1, 1.5, 2]) fig_axis.spines['top'].set_visible(False) fig_axis.spines['right'].set_visible(False) fig_axis.spines['bottom'].set_visible(False) fig_axis.spines['left'].set_visible(False) fig_axis.get_xaxis().tick_bottom() fig_axis.get_yaxis().tick_left() if ax1==None: b.savefig(dataPath + '/tuningHeatmap.png', dpi=300, bbox_inches='tight') return tuningWidthAngle