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
Exemplo n.º 6
0
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)