def test_SCCircuit(): EPS = 1e-12 DTYPE = tf.float64 np.random.seed(0) M = 100 sess = tf.Session() # true_sys = v1_circuit(T=T, dt=dt) Z = tf.placeholder(dtype=DTYPE, shape=(1, M, None)) p = 0.7 std = 0.05 var = std**2 inact_str = "NI" N = 500 param_dict = {"behavior_type": "WTA", "p": p, "var": var, "inact_str": inact_str, "N":N} system = get_system_from_template("SCCircuit", param_dict) print(system.behavior_str) assert ( system.behavior_str == "WTA_mu=7.00E-01_7.00E-01_2.50E-03_2.50E-03_0.00E+00_0.00E+00_1.00E+00_1.00E+00" ) assert system.D == 8 assert system.num_suff_stats == 8 # Test simulation _Z = np.random.normal(0.0, 3.0, (1, M, system.D)) r_t = system.simulate(Z) _r_t = sess.run(r_t, {Z: _Z}) true_sys = sc_circuit() _sW_P = _Z[0, :, 0] _sW_A = _Z[0, :, 1] _vW_PA = _Z[0, :, 2] _vW_AP = _Z[0, :, 3] _dW_PA = _Z[0, :, 4] _dW_AP = _Z[0, :, 5] _hW_P = _Z[0, :, 6] _hW_A = _Z[0, :, 7] W = np.array( [ [_sW_P, _vW_PA, _dW_PA, _hW_P], [_vW_AP, _sW_A, _hW_A, _dW_AP], [_dW_AP, _hW_A, _sW_A, _vW_AP], [_hW_P, _dW_PA, _vW_PA, _sW_P], ] ) W = np.transpose(W, [2, 0, 1]) E_constant = 0.0 E_Pbias = 0.0 E_Prule = 10.0 E_Arule = 10.0 E_choice = 2.0 E_light = 1.0 Es = [E_constant, E_Pbias, E_Prule, E_Arule, E_choice, E_light] _w = system.w N = _w.shape[4] eta_NI = np.ones((system.T,)) r_t_true = np.zeros((2, system.T, M, 4, system.N)) for i in range(M): for j in range(N): _r_t_true_ij = true_sys.simulate(W[i], Es, _w[:, 0, 0, :, j], eta_NI) r_t_true[:, :, i, :, j] = _r_t_true_ij r_t_true = np.transpose(r_t_true, [1, 0, 2, 3, 4]) assert approx_equal(_r_t, r_t_true, EPS) return None
sysname = "SCCircuit" dir_str = 'SC_WTA_%s' % inact_str std = 0.15 var = std**2 N = 500 param_dict = { "behavior_type": "WTA", "p": p, "var": var, "inact_str": inact_str, "N": N, } system = get_system_from_template(sysname, param_dict) # Get DSN architecture repeats = 1 nlayers = 2 arch_params = { 'D': system.D, 'repeats': repeats, 'nlayers': nlayers, 'upl': upl, 'sigma_init': sigma_init, } param_dict.update(arch_params) arch_dict = get_arch_from_template(system, param_dict)
def test_V1Circuit(): os.chdir('dsn/') np.random.seed(0) M = 100 sysname = 'V1Circuit' T = 100 dt = 0.005 W_allen = read_W('allen') # Test rates behavior #TODO at some point this should update to incorporate s into the input function behavior_type = 'rates' fac = 1.0 s = [5] C = len(s) param_dict = {'behavior_type': behavior_type, 'fac': fac, 's': s} system = get_system_from_template(sysname, param_dict) assert (len(system.z_labels) == system.D) # Test parameter setting Z = tf.placeholder(tf.float64, (1, None, system.D)) W, b, h_FF, h_LAT, h_RUN, tau, n, s_0, a, c_50 = system.filter_Z(Z) _Z = np.zeros((1, M, system.D)) Z_a, Z_b = system.density_network_bounds for i in range(system.D): _Z[0, :, i] = np.random.uniform(Z_a[i], Z_b[i], (M, )) tf_vars = [W, b, h_FF, h_LAT, h_RUN, tau, n] with tf.Session() as sess: _tf_vars = sess.run(tf_vars, {Z: _Z}) _W, _b, _h_FF, _h_LAT, _h_RUN, _tau, _n = _tf_vars for i in range(M): assert (approx_equal(np.abs(_W[0, i, :, :]), W_allen, EPS)) assert (approx_equal(_b[0, i, :, 0], _Z[0, i, :4], EPS)) assert (approx_equal(_n[0, i, 0], _Z[0, i, 4], EPS)) assert (approx_equal(_h_FF, 0.0, EPS)) assert (approx_equal(_h_LAT, 0.0, EPS)) assert (approx_equal(_h_RUN, 0.0, EPS)) assert (approx_equal(_tau, 0.02, EPS)) # Test input calculation h = system.compute_h(b, h_FF, h_LAT, h_RUN, s_0) with tf.Session() as sess: _h = sess.run(h, {Z: _Z}) assert (approx_equal(_h[0, :, :, 0], _Z[0, :, :4], EPS)) # Test suff_stat calculation r_t = system.simulate(Z) T_x = system.compute_suff_stats(Z) with tf.Session() as sess: _r_t = sess.run(r_t, {Z: _Z}) _T_x = sess.run(T_x, {Z: _Z}) v1_circuit_true = v1_circuit(T=T, dt=dt, init_conds=system.init_conds) r_ss = np.zeros((M, 4)) for i in range(M): r_t_i = v1_circuit_true.simulate(_W[0, i, :, :], _h[0, i, :, :], _tau[0, i, 0, 0], _n[0, i, 0, 0]) r_ss[i, :] = r_t_i[-1, :] #assert(approx_equal(_r_t[:,0,i,:,0], r_t_i, 1e-6)) # should make exact mean_true = r_ss var_true = np.square(r_ss - np.expand_dims(system.mu[:4], 0)) T_x_true = np.concatenate((mean_true, var_true), axis=1) assert (approx_equal(_T_x, np.expand_dims(T_x_true, 0), 1e-6)) # Check that mu matches data # Local test. Cant put this data on github. s_list = [5, [5], [10], np.array([60])] fac_list = [1.0, 0.5, 100.0] num_s = len(s_list) num_fac = len(fac_list) for i in range(num_s): s = s_list[i] means, stds = read_V1_responses(s) for j in range(num_fac): fac = fac_list[j] means_true = fac * means stds_true = fac * stds vars_true = np.square(stds_true) mu_true = np.concatenate((means_true, vars_true), axis=0) param_dict = {'behavior_type': behavior_type, 'fac': fac, 's': s} system = get_system_from_template(sysname, param_dict) assert (len(system.T_x_labels) == system.num_suff_stats) assert (system.mu.shape[0] == system.num_suff_stats) approx_equal(mu_true, system.mu, EPS) # Test differences behavior #TODO at some point this should update to incorporate s into the input function behavior_type = 'difference' alphas = ['E', 'P', 'S', 'V'] num_alphas = len(alphas) for k in range(num_alphas): alpha = alphas[k] param_dict = { "behavior_type": behavior_type, "alpha": alpha, "inc_val": 0.5, } system = get_system_from_template(sysname, param_dict) assert (len(system.z_labels) == system.D) # Test parameter setting Z = tf.placeholder(tf.float64, (1, None, system.D)) W, b, h_FF, h_LAT, h_RUN, tau, n, s_0, a, c_50 = system.filter_Z(Z) _Z = np.zeros((1, M, system.D)) Z_a, Z_b = system.density_network_bounds for i in range(system.D): _Z[0, :, i] = np.random.uniform(Z_a[i], Z_b[i], (M, )) tf_vars = [W, b, h_FF, h_LAT, h_RUN, tau, n] with tf.Session() as sess: _tf_vars = sess.run(tf_vars, {Z: _Z}) _W, _b, _h_FF, _h_LAT, _h_RUN, _tau, _n = _tf_vars for i in range(M): assert (approx_equal(np.abs(_W[0, i, :, :]), W_allen, EPS)) assert (approx_equal(_h_RUN[0, i, :, 0], _Z[0, i, :], EPS)) assert (approx_equal(_n, 2.0, EPS)) assert (approx_equal(_h_FF, 0.0, EPS)) assert (approx_equal(_h_LAT, 0.0, EPS)) assert (approx_equal(_b, 1.0, EPS)) assert (approx_equal(_tau, 0.02, EPS)) # Test input calculation h = system.compute_h(b, h_FF, h_LAT, h_RUN, s_0) with tf.Session() as sess: _h = sess.run(h, {Z: _Z}) # Test suff_stat calculation r_t = system.simulate(Z) T_x = system.compute_suff_stats(Z) with tf.Session() as sess: _r_t = sess.run(r_t, {Z: _Z}) _T_x = sess.run(T_x, {Z: _Z}) v1_circuit_true = v1_circuit(T=T, dt=dt, init_conds=system.init_conds) r_ss = np.zeros((M, 2)) for i in range(M): r_t_i_NORUN = v1_circuit_true.simulate(_W[0, i, :, :], _h[0, i, :, :], _tau[0, i, 0, 0], _n[0, i, 0, 0]) r_t_i_RUN = v1_circuit_true.simulate(_W[0, i, :, :], _h[1, i, :, :], _tau[0, i, 0, 0], _n[0, i, 0, 0]) r_ss[i, 0] = r_t_i_NORUN[-1, k] r_ss[i, 1] = r_t_i_RUN[-1, k] #assert(approx_equal(_r_t[:,0,i,:,0], r_t_i, 1e-6)) # should make exact dr_ss = r_ss[:, 1] - r_ss[:, 0] mean_true = np.expand_dims(dr_ss, 1) var_true = np.square(mean_true - system.mu[0]) T_x_true = np.concatenate((mean_true, var_true), axis=1) assert (approx_equal(_T_x, np.expand_dims(T_x_true, 0), 1e-6)) return None