def train_model(N, sparsity, eta): W = np.random.normal(0, 1, [N, N]) W = W * (RHO / np.max(np.abs(np.linalg.eig(W)[0]))) WI = random.uniform(-TAU, TAU, N) # make sparse sparsity = 0.99 for i in range(N): for j in range(N): if i != j and random.random() < sparsity: W[i, j] = 0.0 W = W * (RHO / np.max(np.abs(np.linalg.eig(W)[0]))) print(1.0 - np.count_nonzero(W) / (N * N)) mc_max = -inf W = learn_orthonormal(W, eta) while True: print(1.0 - np.count_nonzero(W) / (N * N)) W = learn_orthonormal(W, eta) last_mc = mc(WI, W, iters_skip=N, iters_train=10*N, iters_test=1000) if mc_max < last_mc: mc_max = last_mc if mc_max > last_mc: return W
def train_model(N, eta): W = np.random.normal(0, 1, [N, N]) W = W * (RHO / np.max(np.abs(np.linalg.eig(W)[0]))) WI = random.uniform(-TAU, TAU, N) mc_max = -inf opt_iters = 0 W = learn_orthonormal(W, eta) while True: # W = learn_orthogonal(W, eta) W = learn_orthonormal(W, eta) last_mc = mc(WI, W, iters_skip=N, iters_train=10*N, iters_test=1000) print('N={}, eta={}, mc={}'.format(N, eta, last_mc)) if mc_max < last_mc: mc_max = last_mc if mc_max > last_mc: print() return mc_max, opt_iters opt_iters += 1
def train_model(N, eta): W = np.random.normal(0, 1, [N, N]) W = W * (RHO / np.max(np.abs(np.linalg.eig(W)[0]))) WI = random.uniform(-TAU, TAU, N) mc_max = -inf opt_iters = 0 W = learn_orthonormal(W, eta) while True: # W = learn_orthogonal(W, eta) W = learn_orthonormal(W, eta) last_mc = mc(WI, W, iters_skip=N, iters_train=10 * N, iters_test=1000) print('N={}, eta={}, mc={}'.format(N, eta, last_mc)) if mc_max < last_mc: mc_max = last_mc if mc_max > last_mc: print() return mc_max, opt_iters opt_iters += 1
def generate_data(): numdata = 30000 x = np.random.uniform(eta_min, eta_max, numdata) y = np.random.uniform(xi_min, xi_max, numdata) z = np.zeros(numdata) for i in range(numdata): eta = x[i] decay = y[i] WG = np.random.normal(0, sigma, [N, N]) WI = np.random.uniform(-tau, tau, N) for it in range(ORTHO_ITERATIONS): WG = learn_orthonormal(WG, eta) eta = eta * decay z[i], _ = measure_mc(WG, WI, False) np.save('x', x) np.save('y', y) np.save('z', z) print(z) return x, y, z
def generate_data(): numdata = 30000 x = np.random.uniform(eta_min, eta_max, numdata) y = np.random.uniform(xi_min, xi_max, numdata) z = np.zeros(numdata) for i in range(numdata): eta = x[i] decay = y[i] WG = np.random.normal(0, sigma, [N, N]) WI = np.random.uniform(-tau, tau, N) for it in range(ORTHO_ITERATIONS): WG = learn_orthonormal(WG, eta) eta = eta * decay z[i], _ = measure_mc(WG, WI, False) np.save('x', x) np.save('y', y) np.save('z', z) print(z) return x, y, z
for rsi, N in enumerate(reservoir_sizes): print(N) mc_before = np.zeros(INSTANCES) mc_after = np.zeros(INSTANCES) le_before = np.zeros(INSTANCES) le_after = np.zeros(INSTANCES) for inst in range(INSTANCES): W = random.normal(0, 1, [N, N]) W = W * (rho / np.max(np.abs(np.linalg.eig(W)[0]))) WI = random.uniform(-tau, tau, N) mc_before[inst], le_before[inst] = measure_mc(W, WI) eta = eta_0 for _ in range(ORTHOPROCESS_ITERATIONS): W = learn_orthonormal(W, eta) eta = eta * 0.9 mc_after[inst], le_after[inst] = measure_mc(W, WI) mcb_mean[rsi] = np.average(mc_before) mcb_std[rsi] = np.std(mc_before) leb_mean[rsi] = np.average(le_before) leb_std[rsi] = np.std(le_before) mca_mean[rsi] = np.average(mc_after) mca_std[rsi] = np.std(mc_after) lea_mean[rsi] = np.average(le_after) lea_std[rsi] = np.std(le_after) np.save('mcbm', mcb_mean)
WG = W mc_gon = np.zeros(ORTHO_ITERATIONS + 1) les = [] mc_gon[0], le = measure_mc(WG, WI, True) les.append(le) eigen_values = np.zeros([ORTHO_ITERATIONS + 1, N]) singular_values = np.zeros([ORTHO_ITERATIONS + 1, N]) eigen_values[0, :] = np.sort(np.abs(np.linalg.eig(W)[0])) singular_values[0, :] = np.linalg.svd(W, compute_uv=False) eta = eta_0 for it in range(ORTHO_ITERATIONS): WG = learn_orthonormal(WG, eta) mc_gon[it + 1], le = measure_mc(WG, WI, True) les.append(le) eigen_values[it + 1, :] = np.sort(np.abs(np.linalg.eig(WG)[0])) singular_values[it + 1, :] = np.linalg.svd(WG, compute_uv=False) eta = eta * 0.95 MCs.append(mc_gon) EVs.append(eigen_values) SVs.append(singular_values) LEs.append(les) print() np.save('mc', MCs)
def measure_og(W): return orthogonality(W) OTHS = np.zeros([LINES, ITERATIONS + 1]) LES = np.zeros([LINES, ITERATIONS + 1]) for l in range(LINES): W = random.normal(0, sigma, [q, q]) WI = random.uniform(-tau, tau, q) mc, le = measure_mc(W, WI) og = measure_og(W) OTHS[l, 0] = og LES[l, 0] = le eta = eta_0 for it in range(ITERATIONS): W = learn_orthonormal(W, eta) mc, le = measure_mc(W, WI) og = measure_og(W) OTHS[l, it + 1] = og LES[l, it + 1] = le eta = eta * 0.95 save('oths', OTHS) save('les', LES)
WG = W mc_gon = np.zeros(ORTHO_ITERATIONS + 1) les = [] mc_gon[0], le = measure_mc(WG, WI, True) les.append(le) eigen_values = np.zeros([ORTHO_ITERATIONS + 1, N]) singular_values = np.zeros([ORTHO_ITERATIONS + 1, N]) eigen_values[0, :] = np.sort(np.abs(np.linalg.eig(W)[0])) singular_values[0, :] = np.linalg.svd(W, compute_uv=False) eta = eta_0 for it in range(ORTHO_ITERATIONS): WG = learn_orthonormal(WG, eta) mc_gon[it + 1], le = measure_mc(WG, WI, True) les.append(le) eigen_values[it + 1, :] = np.sort(np.abs(np.linalg.eig(WG)[0])) singular_values[it + 1, :] = np.linalg.svd(WG, compute_uv=False) eta = eta * 0.95 MCs.append(mc_gon) EVs.append(eigen_values) SVs.append(singular_values) LEs.append(les) print() np.save('mc', MCs)
WN = W mc_gon = np.zeros(ORTHO_ITERATIONS + 1) les = [] mc_gon[0], le = measure_mc(WN, WI, True) les.append(le) eigen_values = np.zeros([ORTHO_ITERATIONS + 1, N]) singular_values = np.zeros([ORTHO_ITERATIONS + 1, N]) eigen_values[0, :] = np.sort(np.abs(np.linalg.eig(W)[0])) singular_values[0, :] = np.linalg.svd(W, compute_uv=False) eta = eta_0 for it in range(ORTHO_ITERATIONS): WN = learn_orthonormal(WN, eta) calc_lyapunov = (it + 1) % 10 == 0 mc_gon[it + 1], le = measure_mc(WN, WI, calc_lyapunov) les.append(le) eigen_values[it + 1, :] = np.sort(np.abs(np.linalg.eig(WN)[0])) singular_values[it + 1, :] = np.linalg.svd(WN, compute_uv=False) eta = eta * 0.95 MCs.append(mc_gon) EVs.append(eigen_values) SVs.append(singular_values) LEs.append(les) print()
eigenvaluesG = np.zeros([ORTHO_ITERATIONS + 1, N]) singular_valuesG = np.zeros([ORTHO_ITERATIONS + 1, N]) eigenvaluesN = np.zeros([ORTHO_ITERATIONS + 1, N]) singular_valuesN = np.zeros([ORTHO_ITERATIONS + 1, N]) mc_gon[0] = measure_mc(WG, WI) mc_nor[0] = measure_mc(WN, WI) eigenvaluesG[0, :] = np.sort(np.abs(np.linalg.eig(W)[0])) singular_valuesG[0, :] = np.linalg.svd(W, compute_uv=False) eigenvaluesN[0, :] = np.sort(np.abs(np.linalg.eig(W)[0])) singular_valuesN[0, :] = np.linalg.svd(W, compute_uv=False) for it in range(ORTHO_ITERATIONS): print('\riteration', it, 'of', ORTHO_ITERATIONS, end='') WG = learn_orthogonal(WG, eta) WN = learn_orthonormal(WN, eta) mc_gon[it + 1] = measure_mc(WG, WI) mc_nor[it + 1] = measure_mc(WN, WI) eigenvaluesG[it + 1, :] = np.sort(np.abs(np.linalg.eig(WG)[0])) singular_valuesG[it + 1, :] = np.linalg.svd(WG, compute_uv=False) eigenvaluesN[it + 1, :] = np.sort(np.abs(np.linalg.eig(WN)[0])) singular_valuesN[it + 1, :] = np.linalg.svd(WN, compute_uv=False) print() def replot(): xs = range(ORTHO_ITERATIONS + 1)