def create_report_tensors(state, report_id): T = state.result.T vname = "" #TODO caption = '%s learned tensors, %d iterations' % \ (vname, state.total_iterations) A = create_report_figure_tensors(T, same_scale=False, report_id='tensors', caption=caption) B = create_report_figure_tensors(T, same_scale=True, report_id='tensors-ss', caption='%s (on the same scale)' % caption) report = Node(report_id) report.add_child(A) report.add_child(B) return report
def main(): """ Prepare data with: average_logs_results --dir . --experiment laser_bgds_boot """ print "Loading first..." results = my_pickle_load('out/average_logs_results/laser_bgds_boot.pickle') report = Node('laser_bgds_boot') manual = my_figures(results) write_figures_for_paper(manual) report.add_child(manual) k = 1 variants = sorted(results.keys()) # FIXME: this was uncommented (Was I in a hurry?) # variants = [] for variant in variants: data = results[variant] G = data['G'] B = data['B'] # gy_mean = data['gy_mean'] # y_mean = data['y_mean'] # one_over_y_mean = data['one_over_y_mean'] y_dot_var = data['y_dot_var'] y_dot_svar = data['y_dot_svar'] gy_var = data['gy_var'] gy_svar = data['gy_svar'] print 'Considering %s' % variant n = report.node(variant) #readings = range(360, G.shape[0]) readings = range(0, G.shape[0]) N = len(readings) G = G[readings, :] B = B[readings, :] y_dot_var = y_dot_var[readings] y_dot_svar = y_dot_svar[readings] gy_var = gy_var[readings] gy_svar = gy_svar[readings] for k in [0, 2]: var = 'G[%s]' % k G_k = n.data(var, G[:, k]) G_k_n = G[:, k] / gy_var with G_k.data_pylab('original') as pylab: pylab.plot(G[:, k]) pylab.title(var + ' original') M = abs(G[:, k]).max() pylab.axis([0, N, -M, M]) with G_k.data_pylab('normalized') as pylab: pylab.plot(G_k_n) pylab.title(var + ' normalized') M = abs(G_k_n).max() pylab.axis([0, N, -M, M]) for k in [0, 2]: var = 'B[%s]' % k B_k = n.data(var, B[:, k]) B_k_n = B[:, k] / gy_var with B_k.data_pylab('original') as pylab: pylab.plot(B[:, k]) pylab.title(var + ' original') M = abs(B[:, k]).max() pylab.axis([0, N, -M, M]) with B_k.data_pylab('normalized') as pylab: pylab.plot(B_k_n) pylab.title(var + ' normalized') M = abs(B_k_n).max() pylab.axis([0, N, -M, M]) n.figure('obtained', sub=['B[0]/normalized', 'B[2]/normalized', 'G[0]/normalized', 'G[2]/normalized', ]) n.figure('G', sub=['G[0]/original', 'G[0]/normalized', 'G[2]/original', 'G[2]/normalized']) n.figure('B', sub=['B[0]/original', 'B[0]/normalized', 'B[2]/original', 'B[2]/normalized']) theta = linspace(0, 2 * math.pi, N) - math.pi / 2 with n.data_pylab('B_v') as pylab: pylab.plot(-cos(theta)) pylab.axis([0, N, -2, 2]) with n.data_pylab('B_omega') as pylab: pylab.plot(0 * theta) pylab.axis([0, N, -2, 2]) with n.data_pylab('G_v') as pylab: pylab.plot(-sin(theta)) pylab.axis([0, N, -2, 2]) with n.data_pylab('G_omega') as pylab: pylab.plot(numpy.ones((N))) pylab.axis([0, N, -2, 2]) n.figure('expected', sub=['B_v', 'B_omega', 'G_v', 'G_omega']) norm = lambda x: x / x.max() # norm = lambda x : x with n.data_pylab('y_dot_var') as pylab: pylab.plot(norm(y_dot_var), 'b', label='y_dot_var') pylab.plot(norm(y_dot_svar ** 2), 'g', label='y_dot_svar') pylab.axis([0, N, 0, 1]) pylab.legend() with n.data_pylab('gy_var') as pylab: pylab.plot(norm(gy_var) , 'b', label='gy_var') pylab.plot(norm(gy_svar ** 2), 'g', label='gy_svar') pylab.axis([0, N, 0, 1]) pylab.legend() f = n.figure('stats') f.sub('y_dot_var') f.sub('gy_var') for var in ['y_dot_mean', 'gy_mean', 'y_mean', 'y_var', 'one_over_y_mean']: with n.data_pylab(var) as pylab: pylab.plot(data[var][readings]) f.sub(var) with n.data_pylab('y_mean+var') as pylab: y = data['y_mean'][readings] var = data['y_var'][readings] pylab.errorbar(range(0, N), y, yerr=3 * numpy.sqrt(var), fmt='ro') f.sub('y_mean+var') print variant if True: #variant == 'GS_DS': s = {'variant': variant, 'Gl':G[:, 0] / gy_var, 'Ga':G[:, 2] / gy_var, 'Bl':B[:, 0] / gy_var, 'Ba':B[:, 2] / gy_var } filename = "out/laser_bgds_boot/%s:GB.pickle" % variant.replace('/', '_') make_sure_dir_exists(filename) my_pickle_dump(s, filename) print 'Written on %s' % filename node_to_html_document(report, 'out/laser_bgds_boot/report.html')
def analyze_olfaction_covariance(covariance, receptors): ''' Covariance: n x n covariance matrix. Positions: list of n positions ''' positions = [pose.get_2d_position() for pose, sens in receptors] #@UnusedVariable positions = array(positions).transpose().squeeze() require_shape(square_shape(), covariance) n = covariance.shape[0] require_shape((2, n), positions) distances = create_distance_matrix(positions) correlation = cov2corr(covariance) flat_distances = distances.reshape(n * n) flat_correlation = correlation.reshape(n * n) # let's fit a polynomial deg = 4 poly = polyfit(flat_distances, flat_correlation, deg=deg) knots = linspace(min(flat_distances), max(flat_distances), 2000) poly_int = polyval(poly, knots) poly_fder = polyder(poly) fder = polyval(poly_fder, distances) Ttheta = create_olfaction_Ttheta(positions, fder) Tx, Ty = create_olfaction_Txy(positions, fder, distances) report = Node('olfaction-theory') report.data('flat_distances', flat_distances) report.data('flat_correlation', flat_correlation) with report.data_file('dist_vs_corr', 'image/png') as filename: pylab.figure() pylab.plot(flat_distances, flat_correlation, '.') pylab.plot(knots, poly_int, 'r-') pylab.xlabel('distance') pylab.ylabel('correlation') pylab.title('Correlation vs distance') pylab.legend(['data', 'interpolation deg = %s' % deg]) pylab.savefig(filename) pylab.close() with report.data('fder', fder).data_file('fder', 'image/png') as filename: pylab.figure() pylab.plot(knots, polyval(poly_fder, knots), 'r-') pylab.title('f der') pylab.savefig(filename) pylab.close() report.data('distances', distances) report.data('correlation', correlation) report.data('covariance', covariance) report.data('f', polyval(poly, distances)) f = report.figure(id='cor-vs-distnace', caption='Estimated kernels', shape=(3, 3)) f.sub('dist_vs_corr') f.sub('fder') f.sub('f', display='scale') f.sub('distances', display='scale') f.sub('correlation', display='posneg') f.sub('covariance', display='posneg') T = numpy.zeros(shape=(3, Tx.shape[0], Tx.shape[1])) T[0, :, :] = Tx T[1, :, :] = Ty T[2, :, :] = Ttheta T_report = create_report_figure_tensors(T, report_id='tensors', caption="Predicted learned tensors") report.add_child(T_report) return report