annotate pylearn/algorithms/sparse_coding.py @ 1496:93b8373c6735

Prefix loggers with 'pylearn.' to ensure there is no conflict when using Pylearn code within another library
author Olivier Delalleau <delallea@iro>
date Mon, 22 Aug 2011 11:28:48 -0400
parents e88d7b7d53ed
children
rev   line source
966
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
1 import sys, logging, os
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
2 import numpy, PIL.Image, scipy.optimize
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
3 import theano
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
4
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
5
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
6 from theano import shared, function
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
7 import theano.tensor as TT
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
8 from theano.tensor import matrix, vector, scalar, dot, grad, switch, clip
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
9 floatX = theano.config.floatX
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
10
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
11 from pylearn.io.image_tiling import tile_raster_images
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
12 from pylearn.datasets import image_patches
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
13
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
14 def sample_codebook_prior(shape, rng, dtype=floatX):
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
15 rval = numpy.asarray(rng.randn(*shape), dtype=dtype)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
16 for i, img in enumerate(rval):
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
17 rval[i] = img / numpy.sqrt( (img**2).sum())
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
18 print >> sys.stderr, "TODO: pick a codebook prior"
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
19 return rval
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
20
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
21 def numpy_project_onto_ball(X):
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
22 """Return a copy of X with rows scaled to unit length
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
23 """
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
24 norms = numpy.sqrt((X**2).sum(axis=1))
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
25 norms.shape = (X.shape[0], 1)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
26 return X / norms
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
27
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
28 def reproduce_olshausen():
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
29
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
30 rng = numpy.random.RandomState(89234)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
31 ##
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
32 # load the data into X
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
33 ##
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
34
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
35 #TODO: Make sure this new way of loading the data still gives the
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
36 # right results (check mean and variance!)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
37 X = numpy.asarray(image_patches.load_patches().train.x, dtype=floatX)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
38 img_shape = (20,20)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
39 PIL.Image.fromarray(
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
40 tile_raster_images(X[:100], (20,20), (10,10), (1,1)),
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
41 'L').save('X100.png')
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
42
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
43 X -= numpy.mean(X, axis=0)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
44
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
45 # Constants below are set up for a variance of .01
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
46 X /= 10*numpy.std(X, axis=0)+1e-8
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
47
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
48 batchsize=100
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
49 tile_dims=(24,24)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
50 nZ=tile_dims[0]*tile_dims[1]
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
51
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
52 #C = numpy.asarray((X.shape[0], nZ), dtype=floatX)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
53
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
54 ##
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
55 # symbolic stuff
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
56 ##
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
57 sX = matrix()
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
58 flat_C = vector()
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
59 sC = flat_C.reshape((batchsize, nZ))
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
60 sZ = matrix()
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
61
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
62 sXpred = dot(sC, sZ)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
63
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
64 cost_X = ((sX - sXpred)**2).sum()
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
65 cost_C = TT.log(1+(sC/.116)**2).sum()
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
66 cost = 100.0 * cost_X + 2.2 * cost_C
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
67 gC, gZ = grad(cost, [sC, sZ])
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
68
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
69 cost_fn = function([sX, flat_C, sZ], cost)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
70 debug_fn = function([sX, flat_C, sZ], [cost, cost_X, cost_C])
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
71 gC_fn = function([sX, flat_C, sZ], gC.flatten())
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
72
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
73 gC_gZ_fn = function([sX, sC, sZ], [cost, gC,gZ])
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
74
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
75 # sample some imgs from the dictionary prior
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
76 Z = sample_codebook_prior((nZ, X.shape[1]), rng)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
77
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
78
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
79 # loop over the data by 100 examples at a time
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
80 for j in xrange(1000):
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
81 for i in xrange(10):
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
82 offset = ((j*10+i)*batchsize) % len(X)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
83 Xi = X[offset:offset+batchsize]
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
84 if len(Xi) != batchsize:
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
85 continue
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
86
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
87 #Ci = C[offset:offset+batchsize]
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
88
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
89 # get the optimal C given X and Z by cg
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
90 Ci = scipy.optimize.fmin_cg(
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
91 f=lambda c:cost_fn(Xi, c, Z),
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
92 x0=numpy.dot(Xi, Z.T).flatten(),
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
93 fprime=lambda c: gC_fn(Xi, c, Z),
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
94 maxiter=20,
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
95 gtol=1e-2,
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
96 )
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
97 Ci.shape = (batchsize, nZ)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
98
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
99 print "j", j,
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
100 print "i", i,
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
101 print "Ci**2", (Ci**2).sum(),
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
102
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
103 if 1: # use published algo
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
104
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
105 Xi_residual = Xi - numpy.dot(Ci, Z)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
106
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
107 dZ = numpy.dot(Ci.T, Xi_residual)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
108
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
109 #print "solution", debug_fn(Xi, Ci.flatten(), Z)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
110 print "dXi**2", (Xi_residual**2).sum(),
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
111 print "dZ**2", (dZ**2).sum()
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
112
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
113 eta = 3e-1
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
114
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
115 Z += eta * dZ
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
116 Z = numpy_project_onto_ball(Z)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
117 if 0:
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
118 # use joint optimization of Z and C
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
119 # This is a little faster, but not much.
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
120 #
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
121 # It is important not to change Z too much for any C
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
122 # because small changes in Z can trigger large changes in the corresponding
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
123 # optimal C for a given X. That's a natural consequence of the active
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
124 # sparsification.
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
125
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
126 eta = 1e-3
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
127 for k in xrange(3):
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
128 l, dC,dZ = gC_gZ_fn(Xi, Ci, Z)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
129 print "k", k,
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
130 print "l", l,
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
131 print "dCi**2", (dC**2).sum(),
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
132 print "dZ**2", (dZ**2).sum()
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
133 #Ci -= eta * dC
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
134 Z -= eta * dZ
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
135 Z = numpy_project_onto_ball(Z)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
136
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
137 hist,edges = numpy.histogram(abs(Ci))
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
138 print "Hist"
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
139 for h, e in zip(hist, edges):
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
140 print '%.3f \t %.3f' % (e, h)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
141
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
142 if j < 100:
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
143 PIL.Image.fromarray(
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
144 tile_raster_images(Z, (20,20), tile_dims, (1,1)),
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
145 'L').save('Z_j=%i.png'%j)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
146 else:
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
147 if (j % 10) == 0:
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
148 PIL.Image.fromarray(
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
149 tile_raster_images(Z, (20,20), tile_dims, (1,1)),
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
150 'L').save('Z_j=%i.png'%j)
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
151
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
152
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
153 if __name__ == '__main__':
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
154 logging.basicConfig(stream=sys.stderr)
1496
93b8373c6735 Prefix loggers with 'pylearn.' to ensure there is no conflict when using Pylearn code within another library
Olivier Delalleau <delallea@iro>
parents: 966
diff changeset
155 logging.getLogger('pylearn.algorithms.sparse_coding.main').setLevel(logging.INFO)
93b8373c6735 Prefix loggers with 'pylearn.' to ensure there is no conflict when using Pylearn code within another library
Olivier Delalleau <delallea@iro>
parents: 966
diff changeset
156 logging.getLogger('pylearn.algorithms.sparse_coding.main').info('hello')
966
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
157
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
158 # load olshausen images
e88d7b7d53ed adding algorithms/sparse_coding
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff changeset
159 reproduce_olshausen()