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 [ ]: