Mercurial > pylearn
annotate pylearn/formulas/nnet.py @ 1490:9d2323513092
added formulas/nnet.py with inverse_max_pooling(...)
author | Emmanuel Bengio <bengioe@iro.umontreal.ca> |
---|---|
date | Wed, 27 Jul 2011 10:42:03 -0400 |
parents | 35a3a4e2d999 |
children | 8be8cdde97ee |
rev | line source |
---|---|
1489
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
1 import theano |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
2 from theano import tensor |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
3 from theano.sandbox import neighbours |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
4 |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
5 import tags |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
6 |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
7 |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
8 @tags.tags('nnet', 'max pooling', 'inverse') |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
9 def inverse_max_pooling(max_pool_out,output_shape,pooling_shape=(2,2), |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
10 ignore_borders = True): |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
11 """ |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
12 Return a symbolic variable representing the inverse of a max pooling |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
13 on a given tensor. |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
14 |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
15 Parameters |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
16 ---------- |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
17 max_pool_out : 4D tensor |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
18 A Theano variable representing the output of a max pooling |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
19 output_shape : 4D shape |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
20 The shape of the input before pooling |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
21 pooling_shape : 2D shape |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
22 The shape of the pooling windows |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
23 ignore_borders : boolean |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
24 Will pad borders with zeros if true |
1490
9d2323513092
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
1489
diff
changeset
|
25 |
9d2323513092
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
1489
diff
changeset
|
26 Returns |
9d2323513092
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
1489
diff
changeset
|
27 ------- |
9d2323513092
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
1489
diff
changeset
|
28 ret : 4D tensor |
9d2323513092
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
1489
diff
changeset
|
29 A Theano variable with same shape as output_shape |
1489
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
30 """ |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
31 # flatten the input and repeat it |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
32 repeated_input = [max_pool_out.flatten()]*(pooling_shape[0]*pooling_shape[1]) |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
33 |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
34 # concatenate the repeated vectors into |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
35 # a 2D matrix in the format neibs2images wants |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
36 stacked_conv_neibs = T.stack(*repeated_input).T |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
37 |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
38 # then get back a stretched version of the stacked neighbours |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
39 stretch_unpooling_out = \ |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
40 neighbours.neibs2images(stacked_conv_neibs, |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
41 pooling_shape, |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
42 output_shape, |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
43 'ignore_borders' if ignore_borders else 'valid') |
35a3a4e2d999
added formulas/nnet.py with inverse_max_pooling(...)
Emmanuel Bengio <bengioe@iro.umontreal.ca>
parents:
diff
changeset
|
44 return stretch_unpooling_out |