In [23]:
%matplotlib inline
from pylab import imshow
from display_data import displayData
from pylearn2.datasets.mnist import MNIST
dataset = MNIST(which_set='train', center=True)

In [24]:
b = dataset.get_batch_design(100,1)[0]
I = displayData(b, 'batch.png')
imshow(I, cmap='gray')


Out[24]:
<matplotlib.image.AxesImage at 0x7ff8dbb44a10>

In [ ]:
for b in dataset.iterator('sequential', 100, 60000/100):
    print b.shape

In [26]:
from pylearn2.models.mlp import Linear, MLP
import theano
from theano import tensor as T
import numpy as np
W = MLP(batch_size=100, nvis=200, layers=[
        Linear(dim=784, layer_name='sc', irange=.01)
])
A = W.get_params()[0]
X = theano.shared(np.random.normal(0,1,(100,200)).astype('float32')) #W.input_space.make_theano_batch()
Y = W.fprop(X)
fy = theano.function([], Y)

In [27]:
I = T.matrix()
error = T.sum((I - Y)**2)
l1    = T.sqrt(X**2+1e-6).sum()
l2    = T.sum(A**2)
cost  = error + 0.1 * l1 + .001 * l2
'''
gW = T.grad(cost, A)
gX = T.grad(cost, X)

A = A - lr * gA
X = X - lr * gX
'''


Out[27]:
'\ngW = T.grad(cost, A)\ngX = T.grad(cost, X)\n\nA = A - lr * gA\nX = X - lr * gX\n'

In [28]:
import top
optA = top.Optimizer(A, cost, learning_rate=0.006, method='sgd', input=[I])
optX = top.Optimizer(X, cost, learning_rate=0.0001, momentum=.9, method='rmsprop', input=[I])

In [29]:
for e in xrange(1):
    print e #epoch number
    for b in dataset.iterator('sequential', 100, 60000/100):
        optX.run(100,b)      # Expectation
        _, f = optA.run(1,b) # Maximization


0
$> Compiling optimizer.
$> Compiling optimizer.

In [30]:
from pylab import rcParams
rcParams['figure.figsize'] = 5, 5
img = displayData(A.get_value(), 'A.png')
imshow(img, cmap='gray')


Out[30]:
<matplotlib.image.AxesImage at 0x7ff8db7e6810>