Mercurial > ift6266
comparison deep/convolutional_dae/scdae.py @ 380:0473b799d449
merge
author | Yoshua Bengio <bengioy@iro.umontreal.ca> |
---|---|
date | Mon, 26 Apr 2010 14:56:34 -0400 |
parents | 5ddb1878dfbc |
children |
comparison
equal
deleted
inserted
replaced
379:a21a174c1c18 | 380:0473b799d449 |
---|---|
11 def __init__(self, filter_size, num_filt, num_in, subsampling, corruption, | 11 def __init__(self, filter_size, num_filt, num_in, subsampling, corruption, |
12 dtype): | 12 dtype): |
13 LayerStack.__init__(self, [ConvAutoencoder(filter_size=filter_size, | 13 LayerStack.__init__(self, [ConvAutoencoder(filter_size=filter_size, |
14 num_filt=num_filt, | 14 num_filt=num_filt, |
15 num_in=num_in, | 15 num_in=num_in, |
16 noisyness=corruption, | 16 noise=corruption, |
17 err=errors.cross_entropy, | |
18 nlin=nlins.sigmoid, | |
17 dtype=dtype), | 19 dtype=dtype), |
18 MaxPoolLayer(subsampling)]) | 20 MaxPoolLayer(subsampling)]) |
19 | 21 |
20 def build(self, input, input_shape=None): | 22 def build(self, input, input_shape=None): |
21 LayerStack.build(self, input, input_shape) | 23 LayerStack.build(self, input, input_shape) |
27 old_nfilt = 1 | 29 old_nfilt = 1 |
28 for fsize, nfilt, subs, corr in izip(filter_sizes, num_filts, | 30 for fsize, nfilt, subs, corr in izip(filter_sizes, num_filts, |
29 subsamplings, corruptions): | 31 subsamplings, corruptions): |
30 layers.append(cdae(fsize, nfilt, old_nfilt, subs, corr, dtype)) | 32 layers.append(cdae(fsize, nfilt, old_nfilt, subs, corr, dtype)) |
31 old_nfilt = nfilt | 33 old_nfilt = nfilt |
32 return LayerStack(layers) | 34 return LayerStack(layers, name='scdae') |
33 | 35 |
34 def mlp(layer_sizes, dtype): | 36 def mlp(layer_sizes, dtype): |
35 layers = [] | 37 layers = [] |
36 old_size = layer_sizes[0] | 38 old_size = layer_sizes[0] |
37 for size in layer_sizes[1:]: | 39 for size in layer_sizes[1:]: |
38 layers.append(SimpleLayer(old_size, size, activation=nlins.tanh, | 40 layers.append(SimpleLayer(old_size, size, activation=nlins.tanh, |
39 dtype=dtype)) | 41 dtype=dtype)) |
40 old_size = size | 42 old_size = size |
41 return LayerStack(layers) | 43 return LayerStack(layers, name='mlp') |
42 | 44 |
43 def scdae_net(in_size, filter_sizes, num_filts, subsamplings, | 45 def scdae_net(in_size, filter_sizes, num_filts, subsamplings, |
44 corruptions, layer_sizes, out_size, dtype): | 46 corruptions, layer_sizes, out_size, dtype): |
45 rl1 = ReshapeLayer((None,)+in_size) | 47 rl1 = ReshapeLayer((None,)+in_size) |
46 ls = scdae(filter_sizes, num_filts, subsamplings, | 48 ls = scdae(filter_sizes, num_filts, subsamplings, |
49 ls.build(x, input_shape=(1,)+in_size) | 51 ls.build(x, input_shape=(1,)+in_size) |
50 outs = numpy.prod(ls.output_shape) | 52 outs = numpy.prod(ls.output_shape) |
51 rl2 = ReshapeLayer((None, outs)) | 53 rl2 = ReshapeLayer((None, outs)) |
52 layer_sizes = [outs]+layer_sizes | 54 layer_sizes = [outs]+layer_sizes |
53 ls2 = mlp(layer_sizes, dtype) | 55 ls2 = mlp(layer_sizes, dtype) |
54 lrl = SimpleLayer(layer_sizes[-1], out_size, activation=nlins.softmax) | 56 lrl = SimpleLayer(layer_sizes[-1], out_size, activation=nlins.softmax, |
57 name='output') | |
55 return NNet([rl1, ls, rl2, ls2, lrl], error=errors.nll) | 58 return NNet([rl1, ls, rl2, ls2, lrl], error=errors.nll) |
56 | 59 |
57 def build_funcs(batch_size, img_size, filter_sizes, num_filters, subs, | 60 def build_funcs(batch_size, img_size, filter_sizes, num_filters, subs, |
58 noise, mlp_sizes, out_size, dtype, pretrain_lr, train_lr): | 61 noise, mlp_sizes, out_size, dtype, pretrain_lr, train_lr): |
59 | 62 |
153 def create_series(): | 156 def create_series(): |
154 import tables | 157 import tables |
155 | 158 |
156 series = {} | 159 series = {} |
157 h5f = tables.openFile('series.h5', 'w') | 160 h5f = tables.openFile('series.h5', 'w') |
161 class PrintWrap(object): | |
162 def __init__(self, series): | |
163 self.series = series | |
164 | |
165 def append(self, idx, value): | |
166 print idx, value | |
167 self.series.append(idx, value) | |
158 | 168 |
159 series['recons_error'] = AccumulatorSeriesWrapper( | 169 series['recons_error'] = AccumulatorSeriesWrapper( |
160 base_series=ErrorSeries(error_name='reconstruction_error', | 170 base_series=PrintWrap(ErrorSeries(error_name='reconstruction_error', |
161 table_name='reconstruction_error', | 171 table_name='reconstruction_error', |
162 hdf5_file=h5f, | 172 hdf5_file=h5f, |
163 index_names=('layer', 'epoch'), | 173 index_names=('layer', 'epoch'), |
164 title="Reconstruction error (mse)"), | 174 title="Reconstruction error (mse)")), |
165 reduce_every=100) | 175 reduce_every=100) |
166 | 176 |
167 series['train_error'] = AccumulatorSeriesWrapper( | 177 series['train_error'] = AccumulatorSeriesWrapper( |
168 base_series=ErrorSeries(error_name='training_error', | 178 base_series=ErrorSeries(error_name='training_error', |
169 table_name='training_error', | 179 table_name='training_error', |
199 dset = datasets.nist_digits(1000) | 209 dset = datasets.nist_digits(1000) |
200 | 210 |
201 pretrain_funcs, trainf, evalf, net = build_funcs( | 211 pretrain_funcs, trainf, evalf, net = build_funcs( |
202 img_size = (32, 32), | 212 img_size = (32, 32), |
203 batch_size=batch_size, filter_sizes=[(5,5), (3,3)], | 213 batch_size=batch_size, filter_sizes=[(5,5), (3,3)], |
204 num_filters=[4, 4], subs=[(2,2), (2,2)], noise=[0.2, 0.2], | 214 num_filters=[20, 4], subs=[(2,2), (2,2)], noise=[0.2, 0.2], |
205 mlp_sizes=[500], out_size=10, dtype=numpy.float32, | 215 mlp_sizes=[500], out_size=10, dtype=numpy.float32, |
206 pretrain_lr=0.01, train_lr=0.1) | 216 pretrain_lr=0.001, train_lr=0.1) |
207 | 217 |
208 t_it = repeat_itf(dset.train, batch_size) | 218 t_it = repeat_itf(dset.train, batch_size) |
209 pretrain_fs, train, valid, test = massage_funcs( | 219 pretrain_fs, train, valid, test = massage_funcs( |
210 t_it, t_it, dset, batch_size, | 220 t_it, t_it, dset, batch_size, |
211 pretrain_funcs, trainf, evalf) | 221 pretrain_funcs, trainf, evalf) |