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)