In [1]:
# Import here
%matplotlib inline
import matplotlib.pylab as pylab
import matplotlib.pyplot as plt
import numpy as np
import theano
import theano.tensor as T
pylab.rcParams['figure.figsize'] = (9.0, 6.0)
In [2]:
def cpc(x, N):
n = np.arange(N, dtype=np.float32).reshape((N, 1))
z_matrix = np.float32(x * (N - 1)) - n
r = np.exp(-z_matrix ** 2 / 2)
r /= np.sqrt(np.sum(r ** 2, axis=0, keepdims=True))
return r
In [14]:
t_x, t_y, t_nu = T.fmatrices('x', 'y', 'nu')
t_A = T.fmatrix(name='A')
t_xhat = T.dot(t_A, t_y + t_nu) + 0.5
cost = T.mean((t_xhat - t_x) ** 2)
t_dA = T.grad(cost, t_A)
f = theano.function(inputs=[t_x, t_y, t_nu, t_A],
outputs=[cost, t_xhat, t_dA])
In [17]:
N = 64
A = (2 * np.arange(N, dtype=np.float32).reshape((1, N)) - (N - 1)) / N
In [21]:
sigma = 0.000
dim_batch = 2 ** 14
eta = np.float32(0.1)
for t in range(1000):
x = np.random.uniform(size=(1, dim_batch)).astype(np.float32)
y = cpc(x, N)
nu = sigma * np.random.randn(N, dim_batch).astype(np.float32)
cost, xhat, dA = f(x, y, nu, A)
if (t + 1) % 100 == 0:
print (t + 1), ':', np.sqrt(cost)
A -= eta * dA
In [22]:
plt.plot(A.T)
Out[22]:
In [23]:
np.save('/Users/chayut/Dropbox/data/grid_cells/cpc_decoding_vector_linear.npy', A)
In [24]:
np.load('/Users/chayut/Dropbox/data/grid_cells/cpc_decoding_vector_linear.npy')
Out[24]:
In [ ]: