entropy_over_noise_scale_multiprocessing.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import matplotlib.pyplot as plt
  2. import noise
  3. import numpy as np
  4. from brian2.units import *
  5. from scripts.spatial_maps.orientation_map import OrientationMap
  6. from scripts.interneuron_placement import create_interneuron_sheet_entropy_max_orientation
  7. from scripts.interneuron_placement import create_grid_of_excitatory_neurons, \
  8. create_interneuron_sheet_by_repulsive_force
  9. import multiprocessing
  10. import itertools
  11. trials_per_scale = 1
  12. N_E = 900
  13. N_I = 90
  14. sheet_x = 450 * um
  15. sheet_y = 450 * um
  16. inhibitory_axon_long_axis = 100 * um
  17. inhibitory_axon_short_axis = 25 * um
  18. number_of_excitatory_neurons_per_row = int(np.sqrt(N_E))
  19. '''
  20. Tuning Maps
  21. '''
  22. # tuning_label = "Perlin"
  23. tuning_label = "Orientation map"
  24. # optimization_label = "Repulsive"
  25. optimization_label = "Entropy Optimization"
  26. ellipse_trial_sharpening_list = []
  27. circle_trial_sharpening_list = []
  28. no_conn_trial_sharpening_list = []
  29. def get_fwhm_for_corr_len_and_seed(corr_len,seed):
  30. print(corr_len, seed)
  31. if tuning_label == "Perlin": # TODO: How to handle scale in Perlin
  32. tuning_map = lambda x, y: noise.pnoise2(x / 100.0, y / 100.0, octaves=2) * np.pi
  33. elif tuning_label == "Orientation map":
  34. map = OrientationMap(number_of_excitatory_neurons_per_row + 1, number_of_excitatory_neurons_per_row + 1,
  35. corr_len, sheet_x / um, sheet_y / um, seed)
  36. # map.improve(10)
  37. try:
  38. map.load_orientation_map()
  39. except:
  40. print(
  41. 'No map yet with {}x{} pixels and {} pixel correllation length and {} seed'.format(map.x_dim, map.y_dim,
  42. map.corr_len,
  43. map.rnd_seed))
  44. return -1,-1,-1
  45. tuning_map = lambda x, y: map.orientation_map(x, y)
  46. ex_positions, ex_tunings = create_grid_of_excitatory_neurons(sheet_x / um, sheet_y / um,
  47. number_of_excitatory_neurons_per_row, tuning_map)
  48. inhibitory_radial_axis = np.sqrt(inhibitory_axon_long_axis * inhibitory_axon_short_axis)
  49. if optimization_label == "Repulsive":
  50. inhibitory_axonal_clouds = create_interneuron_sheet_by_repulsive_force(N_I, inhibitory_axon_long_axis / um,
  51. inhibitory_axon_short_axis / um, sheet_x / um,
  52. sheet_y / um, random_seed=2, n_iterations=1000)
  53. inhibitory_axonal_circles = create_interneuron_sheet_by_repulsive_force(N_I, inhibitory_radial_axis / um,
  54. inhibitory_radial_axis / um, sheet_x / um,
  55. sheet_y / um, random_seed=2, n_iterations=1000)
  56. elif optimization_label == "Entropy Optimization":
  57. inhibitory_axonal_clouds, ellipse_single_trial_entropy = create_interneuron_sheet_entropy_max_orientation(
  58. ex_positions, ex_tunings, N_I, inhibitory_axon_long_axis / um,
  59. inhibitory_axon_short_axis / um, sheet_x / um,
  60. sheet_y / um, trial_orientations=30)
  61. inhibitory_axonal_circles, circle_single_trial_entropy = create_interneuron_sheet_entropy_max_orientation(
  62. ex_positions, ex_tunings, N_I, inhibitory_radial_axis / um,
  63. inhibitory_radial_axis / um, sheet_x / um,
  64. sheet_y / um, trial_orientations=1)
  65. return [ellipse_single_trial_entropy,circle_single_trial_entropy]
  66. corr_len_range = range(0, 451, 15)
  67. corr_len_range_len = len(corr_len_range)
  68. seed_range = range(10)
  69. seed_range_len = len(seed_range)
  70. pool_arguments = itertools.product(corr_len_range,seed_range)
  71. use_saved_array = False
  72. if not use_saved_array:
  73. pool = multiprocessing.Pool()
  74. data = pool.starmap(get_fwhm_for_corr_len_and_seed,[*pool_arguments])
  75. print(type(data))
  76. print(data)
  77. data_array = np.reshape(np.array(data),(corr_len_range_len,seed_range_len,2))
  78. data_test = []
  79. np.save('../../simulations/2020_02_27_entropy_over_noise_scale/data_test_save.npy', data_array)
  80. else:
  81. data_array = np.load('../../simulations/2020_02_27_entropy_over_noise_scale/data_test_save.npy')
  82. # ellipse_trial_sharpening_list = np.zeros((len(corr_len_range),len(seed_range)))
  83. # circle_trial_sharpening_list = np.zeros((len(corr_len_range),len(seed_range)))
  84. # no_conn_trial_sharpening_list = np.zeros((len(corr_len_range),len(seed_range)))
  85. print(data_array)
  86. no_conn_trial_sharpening_list = []
  87. ellipse_trial_sharpening_list = []
  88. circle_trial_sharpening_list = []
  89. for i in range(corr_len_range_len):
  90. ellipse_trial_sharpening_list.append(data_array[i,:,0])
  91. circle_trial_sharpening_list.append(data_array[i,:,1])
  92. print(circle_trial_sharpening_list)
  93. ellipse_sharpening_mean = np.array([np.mean(i) for i in ellipse_trial_sharpening_list])
  94. circle_sharpening_mean = np.array([np.mean(i) for i in circle_trial_sharpening_list])
  95. ellipse_sharpening_std_dev = np.array([np.std(i) for i in ellipse_trial_sharpening_list])
  96. circle_sharpening_std_dev = np.array([np.std(i) for i in circle_trial_sharpening_list])
  97. # print(ellipse_trial_sharpening_list)
  98. # print(ellipse_entropy_std_dev)
  99. plt.figure()
  100. plt.plot(corr_len_range,circle_sharpening_mean, label='Circle', marker='o',color='C1')
  101. plt.fill_between(corr_len_range,circle_sharpening_mean-circle_sharpening_std_dev,circle_sharpening_mean+circle_sharpening_std_dev,color='C1',alpha=0.4)
  102. plt.plot(corr_len_range,ellipse_sharpening_mean, label='Ellipse', marker='o',color='C2')
  103. plt.fill_between(corr_len_range,ellipse_sharpening_mean-ellipse_sharpening_std_dev,ellipse_sharpening_mean+ellipse_sharpening_std_dev,color='C2',alpha=0.4)
  104. plt.xlabel('Correlation length')
  105. plt.ylabel('Entropy')
  106. plt.legend()
  107. plt.show()
  108. # plt.figure()
  109. # plt.plot(corr_len_list,circle_entropy_mean, label='Circle', marker='o',color='C1')
  110. # plt.fill_between(corr_len_list,circle_entropy_mean-circle_entropy_std_dev,circle_entropy_mean+circle_entropy_std_dev,color='C1',alpha=0.4)
  111. # plt.plot(corr_len_list,ellipse_entropy_mean, label='Ellipse', marker='o',color='C2')
  112. # plt.fill_between(corr_len_list,ellipse_entropy_mean-ellipse_entropy_std_dev,ellipse_entropy_mean+ellipse_entropy_std_dev,color='C2',alpha=0.4)
  113. # plt.xlabel('Correlation length')
  114. # plt.ylabel('Entropy')
  115. # plt.legend()
  116. # plt.show()