In [1]:
from numpy import *
from scipy import *

In [2]:
T0 = 10000
T1 = 30000
random.seed(31415)

In [38]:
# L layer
D = 2
N = 30
L = 2
alpha = 0.1
b0 = 0.01
corr = 0.0
maxSVD_recur = 0.95
maxSVD_inter = 0.5
taus = [0.8, 0.8]

In [38]:


In [38]:


In [39]:
def activate_function(x):
#    return x
    return tanh(x)
#    return x if x>0 else 0

In [40]:
# bias
B = zeros((L, N), dtype=float)
for l in range(L):
    for i in range(N):
        B[l,i] = random.uniform(-b0, b0)

# generate weight matrix
V = zeros((L, N, N), dtype=float)
for l in range(L):
    for i in range(N):
        for j in range(N):
            V[l, i,j] = random.uniform(-1, 1) if random.uniform(0, 1)<0.3 else 0
    u,s,v = linalg.svd(V[l,:,:])
    for i in range(N):
        for j in range(N):
            V[l,i,j] *= maxSVD_recur/s[0]
#    u,s,v = linalg.svd(V[l,:,:])
#    print s

U = zeros((N, D), dtype=float)
for i in range(N):
    for j in range(D):
        U[i,j] = random.uniform(-1, 1)

    
W = zeros((L, N, N), dtype=float)
for l in range(L):
    for i in range(N):
        for j in range(N):
            W[l,i,j] = random.uniform(-1, 1) if random.uniform(0, 1)<0.3 else 0
    u,s,v = linalg.svd(W[l,:,:])
    for i in range(N):
        for j in range(N):
            W[l,i,j] *= maxSVD_inter/s[0]
#    u,s,v = linalg.svd(W[l,:,:])
#    print s

In [41]:
# generate output sequence
vfunc = vectorize(activate_function, otypes=[float])
x = zeros((L,N), dtype=float)
xx = zeros((L, T0+T1, N), dtype=float)
a = loadtxt("input_D2_corr4.txt")
for l in range(L):
    for i in range(N):
        x[l,i] = random.uniform(-1, 1)
for i in range(T0+T1):
    nx = dot(V[0], x[0]) + dot(W[0].T, x[1]) + alpha*dot(U, a[i]) + B[0, :]
    x[0] = taus[0]*x[0] + (1.0-taus[0])*vfunc(nx)
    for l in range(1,L-1):
        nx = dot(V[l], x[l]) + dot(W[l-1], x[l-1]) + dot(W[l].T, x[l+1]) + B[l, :]
        x[l] = taus[l]*x[l] + (1.0-taus[l])*vfunc(nx)
    nx = dot(V[L-1], x[L-1]) + dot(W[L-2], x[L-2]) + B[L-1, :]
    x[L-1] = taus[L-1]*x[L-1] + (1.0-taus[L-1])*vfunc(nx)
    
    for l in range(L):
        xx[l,i,:] = x[l,:]

In [42]:
for i in range(L):
    savetxt("output_D2_corr4_"+str(i)+".txt", xx[i])

In [42]:


In [ ]: