In [6]:
from numpy import *
from scipy import *
In [7]:
T0 = 10000
T1 = 30000
random.seed(31415)
In [76]:
# L layer
N = 50
L = 2
alpha = 0.01
maxSVD_recur = 0.95
maxSVD_inter = 0.5
#taus = [0.01, 0.01, 0.8, 0.8]
taus = [0.8, 0.8]
In [77]:
def activate_function(x):
# return x
return tanh(x)
# return x if x>0 else 0
In [78]:
# 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, dtype=float)
for i in range(N):
U[i] = random.uniform(-1, 1)/sqrt(N)
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 [79]:
# 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.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])
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])
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])
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 [80]:
for i in range(L):
savetxt("output_ml_"+str(i)+".txt", xx[i])
In [ ]: