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]:
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]:
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
In [30]:
from pylab import rcParams
rcParams['figure.figsize'] = 5, 5
img = displayData(A.get_value(), 'A.png')
imshow(img, cmap='gray')
Out[30]: