Mercurial > ift6266
annotate deep/crbm/mnist_crbm.py @ 342:b25ad1670ff7
Slight bug
author | fsavard |
---|---|
date | Sun, 18 Apr 2010 11:47:35 -0400 |
parents | 523e7b87c521 |
children | 82dae7c46046 |
rev | line source |
---|---|
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
1 #!/usr/bin/python |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
2 |
340
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
3 import sys |
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
4 |
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
5 # do this before importing custom modules |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
6 from mnist_config import * |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
7 |
340
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
8 if not (len(sys.argv) > 1 and sys.argv[1] in \ |
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
9 ('test_jobman_entrypoint', 'run_local')): |
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
10 # in those cases don't use isolated code, use dev code |
342 | 11 isolate_experiment() |
340
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
12 |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
13 import os, os.path |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
14 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
15 import numpy as N |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
16 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
17 import theano |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
18 import theano.tensor as T |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
19 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
20 from crbm import CRBM, ConvolutionParams |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
21 |
340
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
22 import pylearn, pylearn.version |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
23 from pylearn.datasets import MNIST |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
24 from pylearn.io.image_tiling import tile_raster_images |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
25 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
26 import Image |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
27 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
28 from pylearn.io.seriestables import * |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
29 import tables |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
30 |
340
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
31 import ift6266 |
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
32 |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
33 import utils |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
34 |
340
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
35 if not os.path.exists(IMAGE_OUTPUT_DIR): |
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
36 os.mkdir(IMAGE_OUTPUT_DIR) |
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
37 elif os.path.isfile(IMAGE_OUTPUT_DIR): |
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
38 print "IMAGE_OUTPUT_DIR is not a directory!" |
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
39 sys.exit(1) |
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
40 |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
41 #def filename_from_time(suffix): |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
42 # import datetime |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
43 # return str(datetime.datetime.now()) + suffix + ".png" |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
44 |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
45 def jobman_entrypoint(state, channel): |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
46 # record mercurial versions of each package |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
47 pylearn.version.record_versions(state,[theano,ift6266,pylearn]) |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
48 channel.save() |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
49 |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
50 crbm = MnistCrbm(state) |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
51 crbm.train() |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
52 |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
53 return channel.COMPLETE |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
54 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
55 class MnistCrbm(object): |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
56 def __init__(self, state): |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
57 self.state = state |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
58 |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
59 if TEST_CONFIG: |
340
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
60 self.mnist = MNIST.first_1k() |
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
61 print "Test config, so loaded MNIST first 1000" |
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
62 else: |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
63 self.mnist = MNIST.full()#first_10k() |
340
523e7b87c521
Corrected a few bugs, no new features. Supposedly ready to run on cluster.
fsavard
parents:
339
diff
changeset
|
64 print "Loaded MNIST full" |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
65 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
66 self.cp = ConvolutionParams( \ |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
67 num_filters=state.num_filters, |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
68 num_input_planes=1, |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
69 height_filters=state.filter_size, |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
70 width_filters=state.filter_size) |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
71 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
72 self.image_size = (28,28) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
73 |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
74 self.minibatch_size = state.minibatch_size |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
75 |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
76 self.lr = state.learning_rate |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
77 self.sparsity_lambda = state.sparsity_lambda |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
78 # about 1/num_filters, so only one filter active at a time |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
79 # 40 * 0.05 = ~2 filters active for any given pixel |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
80 self.sparsity_p = state.sparsity_p |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
81 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
82 self.crbm = CRBM( \ |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
83 minibatch_size=self.minibatch_size, |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
84 image_size=self.image_size, |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
85 conv_params=self.cp, |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
86 learning_rate=self.lr, |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
87 sparsity_lambda=self.sparsity_lambda, |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
88 sparsity_p=self.sparsity_p) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
89 |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
90 self.num_epochs = state.num_epochs |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
91 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
92 self.init_series() |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
93 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
94 def init_series(self): |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
95 series = {} |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
96 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
97 basedir = os.getcwd() |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
98 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
99 h5f = tables.openFile(os.path.join(basedir, "series.h5"), "w") |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
100 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
101 cd_series_names = self.crbm.cd_return_desc |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
102 series['cd'] = \ |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
103 utils.get_accumulator_series_array( \ |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
104 h5f, 'cd', cd_series_names, |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
105 REDUCE_EVERY, |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
106 stdout_too=SERIES_STDOUT_TOO) |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
107 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
108 sparsity_series_names = self.crbm.sparsity_return_desc |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
109 series['sparsity'] = \ |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
110 utils.get_accumulator_series_array( \ |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
111 h5f, 'sparsity', sparsity_series_names, |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
112 REDUCE_EVERY, |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
113 stdout_too=SERIES_STDOUT_TOO) |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
114 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
115 # so first we create the names for each table, based on |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
116 # position of each param in the array |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
117 params_stdout = [] |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
118 if SERIES_STDOUT_TOO: |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
119 params_stdout = [StdoutAppendTarget()] |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
120 series['params'] = SharedParamsStatisticsWrapper( |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
121 new_group_name="params", |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
122 base_group="/", |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
123 arrays_names=['W','b_h','b_x'], |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
124 hdf5_file=h5f, |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
125 index_names=('epoch','minibatch'), |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
126 other_targets=params_stdout) |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
127 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
128 self.series = series |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
129 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
130 def train(self): |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
131 num_minibatches = len(self.mnist.train.x) / self.minibatch_size |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
132 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
133 for epoch in xrange(self.num_epochs): |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
134 for mb_index in xrange(num_minibatches): |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
135 mb_x = self.mnist.train.x \ |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
136 [mb_index : mb_index+self.minibatch_size] |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
137 mb_x = mb_x.reshape((self.minibatch_size, 1, 28, 28)) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
138 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
139 #E_h = crbm.E_h_given_x_func(mb_x) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
140 #print "Shape of E_h", E_h.shape |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
141 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
142 cd_return = self.crbm.CD_step(mb_x) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
143 sp_return = self.crbm.sparsity_step(mb_x) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
144 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
145 self.series['cd'].append( \ |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
146 (epoch, mb_index), cd_return) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
147 self.series['sparsity'].append( \ |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
148 (epoch, mb_index), sp_return) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
149 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
150 total_idx = epoch*num_minibatches + mb_index |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
151 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
152 if (total_idx+1) % REDUCE_EVERY == 0: |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
153 self.series['params'].append( \ |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
154 (epoch, mb_index), self.crbm.params) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
155 |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
156 if total_idx % VISUALIZE_EVERY == 0: |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
157 self.visualize_gibbs_result(\ |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
158 mb_x, GIBBS_STEPS_IN_VIZ_CHAIN, |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
159 "gibbs_chain_"+str(epoch)+"_"+str(mb_index)) |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
160 self.visualize_gibbs_result(mb_x, 1, |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
161 "gibbs_1_"+str(epoch)+"_"+str(mb_index)) |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
162 self.visualize_filters( |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
163 "filters_"+str(epoch)+"_"+str(mb_index)) |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
164 if TEST_CONFIG: |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
165 # do a single epoch for cluster tests config |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
166 break |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
167 |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
168 if SAVE_PARAMS: |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
169 utils.save_params(self.crbm.params, "params.pkl") |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
170 |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
171 def visualize_gibbs_result(self, start_x, gibbs_steps, filename): |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
172 # Run minibatch_size chains for gibbs_steps |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
173 x_samples = None |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
174 if not start_x is None: |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
175 x_samples = self.crbm.gibbs_samples_from(start_x, gibbs_steps) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
176 else: |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
177 x_samples = self.crbm.random_gibbs_samples(gibbs_steps) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
178 x_samples = x_samples.reshape((self.minibatch_size, 28*28)) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
179 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
180 tile = tile_raster_images(x_samples, self.image_size, |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
181 (1, self.minibatch_size), output_pixel_vals=True) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
182 |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
183 filepath = os.path.join(IMAGE_OUTPUT_DIR, filename+".png") |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
184 img = Image.fromarray(tile) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
185 img.save(filepath) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
186 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
187 print "Result of running Gibbs", \ |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
188 gibbs_steps, "times outputed to", filepath |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
189 |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
190 def visualize_filters(self, filename): |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
191 cp = self.cp |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
192 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
193 # filter size |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
194 fsz = (cp.height_filters, cp.width_filters) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
195 tile_shape = (cp.num_filters, cp.num_input_planes) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
196 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
197 filters_flattened = self.crbm.W.value.reshape( |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
198 (tile_shape[0]*tile_shape[1], |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
199 fsz[0]*fsz[1])) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
200 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
201 tile = tile_raster_images(filters_flattened, fsz, |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
202 tile_shape, output_pixel_vals=True) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
203 |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
204 filepath = os.path.join(IMAGE_OUTPUT_DIR, filename+".png") |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
205 img = Image.fromarray(tile) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
206 img.save(filepath) |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
207 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
208 print "Filters (as images) outputed to", filepath |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
209 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
210 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
211 |
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
212 if __name__ == '__main__': |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
213 args = sys.argv[1:] |
337
8d116d4a7593
Added convolutional RBM (ala Lee09) code, imported from my working dir elsewhere. Seems to work for one layer. No subsampling yet.
fsavard
parents:
diff
changeset
|
214 |
339
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
215 if len(args) == 0: |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
216 print "Bad usage" |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
217 elif args[0] == 'jobman_insert': |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
218 utils.jobman_insert_job_vals(JOBDB, EXPERIMENT_PATH, JOB_VALS) |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
219 elif args[0] == 'test_jobman_entrypoint': |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
220 chanmock = DD({'COMPLETE':0,'save':(lambda:None)}) |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
221 jobman_entrypoint(DEFAULT_STATE, chanmock) |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
222 elif args[0] == 'run_default': |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
223 mc = MnistCrbm(DEFAULT_STATE) |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
224 mc.train() |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
225 |
ffbf0e41bcee
Aded code to run experiment on cluster, separate configuration from other machinery. Not tested yet.
fsavard
parents:
337
diff
changeset
|
226 |